【问题标题】:Inject class object based on generic type using Spring使用 Spring 注入基于泛型类型的类对象
【发布时间】:2014-02-16 07:41:33
【问题描述】:
我有一个关于 Spring 注入的问题。
我有一个使用泛型类型参数定义的类。我想知道是否可以注入 T 类型的类对象(我的意思是 T.class)?
像这样:
@Component
public class MyExecutor<T> {
@Autowired
public MyExecutor(<Inject class object of T>) {
....
}
}
非常感谢。
【问题讨论】:
标签:
java
spring
dependency-injection
【解决方案1】:
那个具体的例子是行不通的,但是还有另一种方法可以使用泛型创建 bean,并在将 bean 注入其他 bean 时保持类型。
Spring 4 在 Java 配置中扩展了对泛型的支持。现在可以定义两个仅在使用的泛型参数上有所不同的 bean,并按类型将它们注入另一个 bean,请参见 JIRA:
@Configuration
public class Config {
@Bean("beanA")
public MyExecutor<A> beanA() {
return new MyExecutor<A>(A.class);
}
@Bean("beanB")
public MyExecutor<B> beanB() {
return new MyExecutor<B>(B.class);
}
}
那么就可以按类型注入beanA或者beanB了:
@Component
public class OtherClass {
@Autowired
private MyExecutor<A> beanA;
}