假设我有一个名为HelloWorld bean,有一个成员属性指向另一个bean用户。
注释@ autowired,只要调用getBean在运行时,将自动返回的HelloWorld实例用户属性注入用户实例。
这种行为由Spring框架实现如何?
(1)在Spring容器实现的刷新方法中,所有的单例bean将默认初始化。
HelloWorld bean初始化时:
,因为它有以下源代码:
<>以前@Autowiredprivate User 用户;在运行时,这个注释可以在元数据通过反射。在元数据结构下,targetClass指向HelloWorld bean, injectedElements指向用户类被注入。
在doResolveDependency(2),用户bean的定义是基于搜索的alt="春天框架里注解@ autowired的工作原理”>
一旦发现,发现结果添加到数组candidateNames:
用户bean类的构造函数被称为(仍由getBean触发调用),用户通过调用构造函数创建实例:
创建的用户实例与它的名字“用户”插入地图matchingBeans。
-
<李>最后的用户参考设置为用户属性HelloWorld实例通过反射。这里的变量569行指向HelloWorld bean实例,和价值指向用户实例。李>
字段。集(bean,值),我们可以观察到在调试器,用户属性在HelloWorld例子已经注射成功。
要获取更多杰里的原创文章,请关注公众号“汪子熙“: