【发布时间】:2013-01-16 21:38:23
【问题描述】:
所以我在 Spring 3.2 中有许多泛型,理想情况下我的架构应该是这样的。
class GenericDao<T>{}
class GenericService<T, T_DAO extends GenericDao<T>>
{
// FAILS
@Autowired
T_DAO;
}
@Component
class Foo{}
@Repository
class FooDao extends GenericDao<Foo>{}
@Service
FooService extends GenericService<Foo, FooDao>{}
不幸的是,对于泛型的多个实现,自动装配会引发关于多个匹配 bean 定义的错误。我认为这是因为@Autowired 在类型擦除之前处理。我发现或提出的每个解决方案对我来说都很难看,或者只是莫名其妙地拒绝工作。解决此问题的最佳方法是什么?
【问题讨论】:
-
您是否尝试将
@Autowired注释移动到 setter? -
您是否尝试过使用带有注释的
@Qualifier来指定您想要的实现版本? -
你遇到type erasure。这些问题可能有用:(1)、(2)。
-
请注意:泛型只是编译糖。它们在运行时不存在。所以当你需要构造你的对象时,你没有任何关于这个的信息......
标签: java generics spring-mvc inversion-of-control autowired