在弹簧启动中按类型参数化Bean工厂

时间:2017-07-19 11:06:40

标签: java spring spring-mvc

我有几个接口定义了一些服务:

public interface Service {
    // marker
}

public interface ServiceA extends Service {
    public method doA(AParameter a);
}

public interface ServiceB extends Service {
    public method doB(BParameter b, AnotherParameter c);
}

他们的实现总是以相同的方式构建:

@Bean
public ServiceA getService() {
    return new Servicebuilder().build(ServiceA.class);
}

@Bean
public ServiceB getService() {
    return new Servicebuilder().build(ServiceB.class);
}

我将它们与标准自动装配一起使用

class Controller {

     private final ServiceA serviceA;

     private final ServiceB serviceB;

     @Autowired
     public Controller(ServiceA service A, ServiceB serviceB) {
         this.serviceA = serviceA;
         this.serviceB = serviceB;
     }
}

现在我希望我的团队能够通过定义接口来简单地添加新服务,而无需每次都编写bean提供程序。所以原则上,我想做一些像

这样的事情
@Bean
public <T extends Service> T getService(Class<T> clazz) {
    return new Servicebuilder().build(clazz);
}

但是,

失败了
Parameter 0 of constructor in Controller required a bean of type 'ServiceA' that could not be found.

我正在使用Spring Boot 1.5.1。

我已经查看了自定义限定符,并且有很多关于Bean中泛型的答案。但似乎没有一个适合我的情况。有没有办法实现这个目标?

0 个答案:

没有答案