为了账号安全,请及时绑定邮箱和手机立即绑定

再次使用 Autowire Bean 还是使用 getter?

再次使用 Autowire Bean 还是使用 getter?

qq_笑_17 2021-11-11 15:59:03
我有一个抽象类,它自动装配一些 bean,例如一个存储库:public abstract class A {    @Autowired    private ARepository aRepository;    protected void useRepository() {        aRepository.doSomething();    }}这个抽象类使用该存储库来处理某些方法。现在我还有一个子类,它扩展类A并且还有一个方法,它使用ARepository.public class B extends A {    private void useRepositoryAgain() {        aRepository.doSomething();    }}现在我的问题:我怎么看有两种方法可以做到这一点:1:B再次在课堂上自动装配存储库:public class B extends A {    @Autowired    private ARepository aRepository;    ...}2:在A类中创建getter方法:public abstract class A {    ...    public ARepository getARepository() {        return this.aRepository;    }}public class B extends A {    private void useRepositoryAgain() {        getARepository().doSomething();    }}根据我的理解,两者之间应该没有区别,因为再次自动装配存储库只会返回它的相同实例。我的理解是否正确,或者我缺少的两种方法之间是否存在显着差异?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

再次自动装配 bean 将不起作用。它会导致aRepository类中的成员变量A为null. Spring 只会在类中自动装配成员变量,B而不会在A.


相反,只在 classA而不是在 class 中自动装配它B,并使它protected而不是private在 class 中,A以便子类中的方法B也可以访问它:


public abstract class A {

    @Autowired

    protected ARepository aRepository;


    protected void useRepository() {

        aRepository.doSomething();

    }

}


public class B extends A {


    private void useRepositoryAgain() {

        // Fine, since aRepository is protected in the superclass

        aRepository.doSomething();

    }

}


查看完整回答
反对 回复 2021-11-11
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信