【发布时间】:2009-02-02 12:10:57
【问题描述】:
我正在尝试将 Spring IoC 与这样的接口一起使用:
public interface ISimpleService<T> {
void someOp(T t);
T otherOp();
}
Spring 能否提供基于泛型类型参数 T 的 IoC?我的意思是,像这样:
public class SpringIocTest {
@Autowired
ISimpleService<Long> longSvc;
@Autowired
ISimpleService<String> strSvc;
//...
}
当然,我上面的例子是行不通的:
expected single matching bean but found 2: [serviceLong, serviceString]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:957)
我的问题:是否可以在对接口或实现类进行最少修改的情况下提供类似的功能?例如,我知道我可以使用@Qualifiers,但我想让事情尽可能简单。
【问题讨论】:
-
从 Spring 4.0 开始现在似乎有可能。请参阅此 SO answer 和标题为 Spring Framework 4.0 and Java Generics 的 Spring 文章。
标签: java spring inversion-of-control types generics