关于java:@autowired注释如何用于私有字段?

How does @autowired annotation works for a private field?

本问题已经有最佳答案,请猛点这里访问。

对于没有getter setter的私有字段,@Autowired注释是如何工作的?Spring如何访问私有字段?


它与反射一起工作。在这里,您可以找到如何设置公共字段的示例。但是设置私有字段并没有什么不同


1
2
3
4
5
6
7
8
@Component
public class A(){}

@Component
public class B(){
@Autowired
private A a;
}

Spring创建被称为@component的bean。这里将首先创建bean a,因为b依赖于a,所以将完成a到b的注入。不需要任何二传手。只需要@component。Spring使用cglib通过反射创建bean。


依赖注入的三种类型

对象可以通过至少三种方式接收对外部模块的引用:

构造函数注入:依赖项是通过类构造函数提供的。

setter注入:客户端公开了一个setter方法,该方法是注入器用来注入依赖项的。

接口注入:依赖项提供了一个注入器方法,将依赖项注入传递给它的任何客户机。客户端必须实现一个公开接受依赖项的setter方法的接口。