我有一个基本抽象类说A,它被另一个抽象类B扩展,最后是一个扩展B的具体类C.
这里在C类中尝试在Base Abract A类中自动装配dataSource但是@Autowired
不能在抽象类中工作,甚至在sop(dataSource)中获得null
如果我在具体的C类中自动装配dataSource
,它的工作。
请任何人帮我这个..我想使用一个通用的基类来获取dataSource。但是@Autowired
并不适用。
如果有人通过示例提供解决方案,那将会有很大的帮助。
先谢谢..
示例代码:
abstract Class A
{
@Autowired DataSource dataSource;
setConnection(){ sop(dataSource); }
}
abstract Class B extends A
{ -- Method conn()
{ setConnection();}
}
Class C extends B
{
Invoke conn();
}
答案 0 :(得分:1)
假设您已经在ComponentScan路径中获得了所有抽象类,那么应该工作。请参阅:Spring can you autowire inside an abstract class?
虽然我怀疑是否真的有必要设置一个抽象类来简单地设置DataSource。 Spring Beans默认是Singletons,所以如果你只是直接@Autowired
将数据源button-clear
放到所有“子类”中,那么你将获得相同的实例。
答案 1 :(得分:0)
您尝试做的事应该没有任何问题。正如@Ben在他的回答中所说,所有父类都应该由Spring扫描。
此外,在对象创建之后发生自动装配。这意味着,如果您在C.conn()
课程中调用C
方法,构造函数,dataSource
字段仍将取消设置(即其值仍为null
)。
如果我是你,我会检查是否符合上述条件。