第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我正在使用 Spring-Boot,使用類名字符串動(dòng)態(tài)初始化一個(gè)類并獲取返回值

我正在使用 Spring-Boot,使用類名字符串動(dòng)態(tài)初始化一個(gè)類并獲取返回值

躍然一笑 2023-05-10 15:14:21
我在 Spring Boot 中工作,MyService class我得到了一個(gè)名為 String 的類,我想初始化該對象并取回返回值。但我對此沒有更多的想法,我認(rèn)為它是通過依賴注入實(shí)現(xiàn)的。但是,怎么辦?假設(shè)我有類A.java, B.java, C.java和服務(wù)類MyService.java@Componentpublic class A{    public String wish(int timeHr){       //some logic of time based wish    return "Hello A"+" good morning";}}@Componentpublic class B{    public String wish(int timeHr){       //some logic of time based wish    return "Hello B"+" good morning";}}@Componentpublic class C{    public String wish(int timeHr){       //some logic of time based wish    return "Hello C"+" good morning";}}@Servicepublic class MyService{   // i get here A class name as String like,   String classNameString = "A"; // or "B", or "C"   int timrHr =  new Date().getHours();   //how to here i will initialize above class and get method wist(param) returned wish msg.   //like, a.wish(timeHr); and it gives "Hello A good morning"}我期望 wish() 返回的輸出。誰能建議我如何實(shí)現(xiàn)它?
查看完整描述

3 回答

?
catspeake

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊

我可以想到兩種方法。第一種方法是命名類(在 @Component 之后)并使用上下文,嘗試獲取 bean。您還可以使用 @Qualifier 命名 bean


@Component("A")

public class A{

    public String wish(int timeHr){

       //some logic of time based wish

    return "Hello A"+" good morning";

}



@Component("B")

public class B{

    public String wish(int timeHr){

       //some logic of time based wish

    return "Hello B"+" good morning";

}

}


@Component("C")

public class C{

    public String wish(int timeHr){

       //some logic of time based wish

    return "Hello C"+" good morning";

}

}



@Service

public class MyService{

   @Autowired

   private ApplicationContext context;


  void myMethod() {

    A a = (A) context.getBean("A");



     System.out.println(a.wish(123));

   } 

    }

第二種方法是讓你所有的愿望類實(shí)現(xiàn)一個(gè)接口并遍歷這個(gè)接口的所有實(shí)現(xiàn) bean 并找到正確的 bean


@Component

public class A implements Wisher{

    public String wish(int timeHr){

       //some logic of time based wish

    return "Hello A"+" good morning";

}



@Component

public class B implements Wisher{

    public String wish(int timeHr){

       //some logic of time based wish

    return "Hello B"+" good morning";

}

}


@Component

public class C implements Wisher{

    public String wish(int timeHr){

       //some logic of time based wish

    return "Hello C"+" good morning";

}

}


public interface Wisher{ public String wish(int time); }


@Service

public class MyService{

   @Autowired

   private List<Wisher> wishers;


void myMethod() {

    String requiredClassName = "A";

    Wisher requiredWisher = null;

    for (int i = 0; i < wishers.length(); i++) {

        Wisher w = wishers.get(i);

        if (w.getClass().getName().equals(requiredClassName)) {

            requiredWisher = w;

            break;

        }


        System.out.println(w.wish(123));

    }

}




    }


查看完整回答
反對 回復(fù) 2023-05-10
?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

考慮到您正在使用 Spring 實(shí)現(xiàn),所有 bean 都將是 Singleton,并且這些 bean 將在 App 啟動(dòng)時(shí)(加載 ApplicationContext 時(shí))進(jìn)行初始化,然后應(yīng)用程序無法檢查要注入哪個(gè)實(shí)現(xiàn)。


因此,您無法在運(yùn)行時(shí)使用依賴注入有條件地注入 bean


相反,您可以使用如下所示的其他設(shè)計(jì) -


@Service

public class MyService{


  private Wisher wisher;


  public Wisher setupWisher(String class){


   if (class.equals("A")) {

        wisher = new A();

    }else if(class.equals("B")){

        wisher = new B();

    }else if(class.equals("C")){

        wisher = new C();

    }

 }


 void myMethod(String requestString) {

    int timrHr =  new Date().getHours();

    setupWisher(requestString).wish(timrHr);       

 }


}


查看完整回答
反對 回復(fù) 2023-05-10
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

String 不是 Spring IoC 框架可管理的 bean,而是類的實(shí)例A,B并且C是您的 beans。


你應(yīng)該做的是聲明類A,B并C作為公共接口的實(shí)現(xiàn),并通過這種類型注入相應(yīng)的 bean:


interface Wisher {

   String wish(int timeHr);

}


@Component

public class A implements Wisher {

  public String wish(int timeHr){

     //some logic of time based wish

    return "Hello A"+" good morning";

  }

}


@Component

public class B implements Wisher {

  public String wish(int timeHr){

     //some logic of time based wish

  return "Hello B"+" good morning";

  }

}


@Component

public class C implements Wisher {

  public String wish(int timeHr){

     //some logic of time based wish

  return "Hello C"+" good morning";

  } 

}


@Service

public class MyService{

   @Autowired

   private Wisher a; // instance of "A" or "B", or "C"


   void myMethod() {

        int timrHr =  new Date().getHours();

        wisher.wish(timrHr);

   } 

 }


查看完整回答
反對 回復(fù) 2023-05-10
  • 3 回答
  • 0 關(guān)注
  • 199 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號