如何使用类名自动装配Spring服务?

时间:2017-10-02 11:56:36

标签: java spring

我有多个服务,我想使用他们的类名动态自动装配这些服务。我有一个名为" 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();
}

2 个答案:

答案 0 :(得分:4)

您可以在两个服务上使用限定符,并根据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();
}

答案 1 :(得分:3)

获取ApplicationContext的实例并通过类名获取bean:

@Autowired
ApplicationContext ctx;

使用方法getBean(...)

BaseService baseService = ctx.getBean(Service1.class.getName());

但是,正如另一个答案所说,我建议您使用@Qualifier(...)有条件地注入某个名称。