Java 再次使用Autowire Bean还是使用getter?
我有一个抽象类,它自动连接一些bean,例如存储库:Java 再次使用Autowire Bean还是使用getter?,java,spring,Java,Spring,我有一个抽象类,它自动连接一些bean,例如存储库: public abstract class A { @Autowired private ARepository aRepository; protected void useRepository() { aRepository.doSomething(); } } 这个抽象类将该存储库用于某种方法。现在我还有一个子类,它扩展了classa,还有一个方法,它使用了ARepository pu
public abstract class A {
@Autowired
private ARepository aRepository;
protected void useRepository() {
aRepository.doSomething();
}
}
这个抽象类将该存储库用于某种方法。现在我还有一个子类,它扩展了classa
,还有一个方法,它使用了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();
}
}
在我的理解中,两者之间应该没有区别,因为再次自动连接存储库只会返回相同的实例
我的理解是否正确,或者我所缺少的两种方法之间是否存在显著差异?再次自动连接bean将不起作用。它将导致类
A
中的成员变量aRepository
变为null
。Spring将只自动关联类B
中的成员变量,而不自动关联A
中的成员变量
相反,只在类A
中自动连接它,而不在类B
中自动连接,并使其受保护
,而不是类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();
}
}
有道理,谢谢。您建议使用这种方法,而不是将字段私有化并创建getter,这有什么原因吗?我认为这是最好的方法。@Niby你也可以将其设置为
private
并添加一个protected
getter方法,我认为这更多是个人偏好/风格的问题。我自己不喜欢添加不必要的getter方法。