【发布时间】:2011-07-28 10:00:25
【问题描述】:
我在使用泛型时遇到了 Spring 的问题。 下面的代码很好的描述了这个问题:
public class TestInj<S> {
S elem;
public S getElem() {
return elem;
}
public void setElem(S elem) {
this.elem = elem;
}
}
@Component
public class First extends TestInj<String> {
public First() {
setElem("abc");
}
}
@Component
public class Second extends TestInj<Integer> {
public Second() {
setElem(2);
}
}
public class BaseTest<T> {
@Autowired
protected TestInj<T> test;
}
@Named
public class Test extends BaseTest<String> {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("conf-spring.xml");
context.refresh();
Test test = (Test) context.getBean("test", Test.class);
System.out.println(test.test.getElem());
}
}
问题是,在 BaseTest 类中应该注入 First 类,因为它具有泛型类型 String。但是 spring 不明白这一点并告诉我,自动装配有两种可能的候选者。原因是 spring 忽略了泛型。是否有解决方案或解决方法?
【问题讨论】:
-
我认为你可以在 Guice 和 CDI 中做到这一点