Spring中Bean的实例化与DI的过程 (4)

protected void inject(Object bean, String beanName, PropertyValues pvs) throws Throwable {
Field field = (Field) this.member;
try {
Object value;
if (this.cached) {
value = resolvedCachedArgument(beanName, this.cachedFieldValue);
} else {
DependencyDescriptor desc = new DependencyDescriptor(field, this.required);
desc.setContainingClass(bean.getClass());
Set

刚方法总体来说比较简单,首先是查询当前bean的依赖是否已经被缓存,如果缓存了则从缓存中取即可。 如果是第一次解析则从beanfactory中获取相应的依赖属性。 synchronized代码块主要就是将解析后的依赖的值缓存起来,建立当前bean和其依赖的属性之间的关系。当下一次创建该类型的bean时可以直接使用不需重新解析。 而真正的属性注入是依赖着几行代码:

if (value != null) {
ReflectionUtils.makeAccessible(field);
field.set(bean, value);
}
```

上面的代码没有任何的难度,就是对JDK中反射的api的使用。

基本上后面就是重复这个过程对bean的属性进行注入,在这一过程中最重要的就是beanPostProcessor,注入都已依赖这一组完成的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyfsj.html