【发布时间】:2013-03-21 22:07:56
【问题描述】:
我希望能够通过将 Guava TypeToken 对象指定为 Spring xml 配置中的 bean 来注入它们。有没有好的方法来做到这一点?有没有人写过任何 cade/图书馆来让这更容易?
TypeToken 似乎通过使用反射来自省其泛型类型,因此使用匿名类构造,例如:
new TypeToken<List<String>>() {}
Spring 的 xml 配置语法似乎根本不接受泛型,大概是因为它是在运行时构建的并且“不需要”它们(因为泛型是编译时检查,技术上在运行时会删除)。
所以我知道实例化 TypeToken bean 的唯一方法就是这样做 in java:
TokenConfig.java:
@Configuration
public class TokenConfig {
@Bean
public TypeToken<List<String>> listOfStringsToken() {
return new TypeToken<List<String>>() {};
}
}
系统测试配置.xml:
<beans>
<context:annotation-config/>
<bean class="com.acme.TokenConfig"/>
<bean class="com.acme.Consumer">
<property name="typeToken" ref="listOfStringsToken"/>
</bean>
</beans>
有没有办法只用一个 xml 配置来做到这一点?
【问题讨论】:
-
既然用的是Spring注解,为什么还要再用XML配置bean呢?
-
使用 xml 配置而不是注解的原因有几个,但最主要的原因是将配置与实现分开。如果您有多个具有不同配置的相同实现的用户,这将特别有用。另一个原因是因为我的员工需要它,因为架构师之前的决定我不能立即改变。