![](/img/trans.png)
[英]How to Autowire a Spring-annotated service class in a @Configuration class?
[英]How to autowire Spring service with Class name?
我有多個服務,我想使用他們的類名動態自動裝配這些服務。 我有一個名為“runCustomService”的方法,這個方法將服務的類名作為輸入參數(如“Service1”或“Service2”)。 我想自動裝配這些服務並調用其run方法。 有沒有辦法做到這一點?
@Service
public class Service1 extends BaseService{
@Autowired
private AnotherService anotherService;
public void run(){ .... }
}
@Service
public class Service2 extends BaseService{
@Autowired
private AnotherService anotherService;
public void run(){ .... }
}
public void runCustomService(String serviceClassName){
BaseService baseService = //Create baseService object from serviceClassName
baseService.run();
}
您可以在兩個服務上使用限定符,並根據ApplicationContext中的限定符名稱獲取正確的bean。
@Service
@Qualifier("Service1")
public class Service1 extends BaseService{
@Service
@Qualifier("Service2")
public class Service2 extends BaseService{
@Autowired
ApplicationContext applicationContext;
public void runCustomService(String serviceClassName){
BaseService baseService = applicationContext.getBean(serviceClassName);
baseService.run();
}
獲取ApplicationContext的實例並通過類名獲取bean:
@Autowired
ApplicationContext ctx;
使用方法getBean(...) :
BaseService baseService = ctx.getBean(Service1.class.getName());
但是,正如另一個答案所說,我建議您使用@Qualifier(...)
有條件地注入某個命名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.