java - 如何使用类名 Autowiring Spring 服务?

标签 java spring

我有多个服务,我想使用它们的类名动态地 Autowiring 这些服务。我有一个名为“runCustomService”的方法,该方法将服务的类名作为输入参数(如“Service1”或“Service2”)。我想 Autowiring 这些服务并调用它的 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();
}

关于java - 如何使用类名 Autowiring Spring 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524998/

相关文章:

spring - 如何使用 liquibase 在 spring 中从数据库和持久性实体之间的差异生成变更日志?

java - 使用 POST 请求时 Spring MVC 无法在 Controller 中找到方法

java - 为什么我的变量没有重置每个循环?

java - 有没有更好的方法从多个字符串数组中查找任何字符串

java - Curl 到 Java httpclient

java - 正则表达式删除特殊字符

java - 集成 springMVC 和 extjs

java - Lucene 面试题

java - 在类路径资源 + Springboot 中创建名称为 'dataSource' 的 bean 时出错

java - 请求的资源上不存在 'Access-Control-Allow-Origin' header ,并且 JWT token 不以 Bearer String 开头