如何在子类中覆盖@Autowired属性

时间:2016-05-21 20:36:28

标签: java spring design-patterns

我决定覆盖子类中的自动装配字段。我该怎么做才能覆盖? 像这样的东西

class Superclass {
    @Autowired
    Test test;

    public Test getTest() {
        return test;
    }
}

class Subclass extends Superclass {
    @Autowired
    Test2 test2;

    public Subclass() {
        super().test=test2;
    }
}

2 个答案:

答案 0 :(得分:1)

如果理解正确,您希望自动填充值test2并使用方法test()来使用此新值。

java中没有办法覆盖类变量,至少使用受保护的字段将允许您在子类中修改它的值。 但在这种情况下,我认为最好覆盖getTest()方法来返回test2。

答案 1 :(得分:1)

感谢@dok解决方案我以这种方式覆盖字段:

class Superclass {
    private Test test;

    @Autowired
    public Test getTest(Test test) {
        return this.test = test;
    }
}

class Subclass extends Superclass {
    @Override
    @Autowired
    public Test getTest(Test2 test2) {
        return super.getTest(test2);
    }

}