Java @使用<;声明的自动连线类成员;违约>;范围而非私有

Java @使用<;声明的自动连线类成员;违约>;范围而非私有,java,spring,Java,Spring,我一直在互联网上阅读有关Spring的文章和教程,我看到很多文章和教程都有代码示例,在这些示例中,他们用作用域默认值而不是私有声明@Autowired成员 例如 而不是 @Autowired private AccountRepository accountRepository; 我想知道这是为什么。因为从良好的封装角度来看,我认为这是错误的。在Spring中这样做有什么好处是我不知道的吗?直接通过字段注入依赖项从来都不是一个好的做法,而是使用构造函数注入(@JBNizet也指出了这一点),您

我一直在互联网上阅读有关Spring的文章和教程,我看到很多文章和教程都有代码示例,在这些示例中,他们用作用域默认值而不是私有声明@Autowired成员

例如

而不是

@Autowired
private AccountRepository accountRepository;

我想知道这是为什么。因为从良好的封装角度来看,我认为这是错误的。在Spring中这样做有什么好处是我不知道的吗?

直接通过字段注入依赖项从来都不是一个好的做法,而是使用构造函数注入(@JBNizet也指出了这一点),您可以查看关于这一点的更多细节


简而言之,您应该在bean构造函数上使用
@Autowired
,bean构造函数通常是
公共的

它们可以是私有的,但是spring必须通过反射来更改字段的可见性;安全管理器可能不允许这样做。对于真正的封装,您不会自动连接字段。您将自动连接构造函数。这也使得测试更容易,相关性也更清晰。举个例子时,为了简洁起见,可能会省略“private”。毕竟,他们没有在那些教程中教你封装,他们希望他们的要点尽可能清晰。@RomanPuchkovskiy我也是这么想的。我只是想确定我没有错过什么。
@Autowired
private AccountRepository accountRepository;