@Autowired for abstract class in abstract class is not working and getting null object

时间:2016-02-02 14:56:23

标签: spring datasource abstract-class autowired spring-annotations

我有一个基本抽象类说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();
    }

2 个答案:

答案 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)。

如果我是你,我会检查是否符合上述条件。