我有几个接口定义了一些服务:
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中泛型的答案。但似乎没有一个适合我的情况。有没有办法实现这个目标?