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

我有一个抽象类,它自动装配一些 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();

    }

}

根据我的理解,两者之间应该没有区别,因为再次自动装配存储库只会返回它的相同实例。


我的理解是否正确,或者我缺少的两种方法之间是否存在显着差异?


qq_笑_17
浏览 131回答 1
1回答

SMILET

再次自动装配 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();    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java