簡體   English   中英

如何使用類名自動裝配Spring服務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM