首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring的属性初始弥合析

2012-12-25 
Spring的属性初始化解析Spring加载一个Bean是通过其xml中定义的class属性来加载对象的.通过Bean的name来得

Spring的属性初始化解析
Spring加载一个Bean是通过其xml中定义的class属性来加载对象的.
通过Bean的name来得到Bean对象
那么Spring的Bean又怎么初始化Bean的属性值的呢。
看文档都是浮云,直接看源码比较清晰.
protected void applyPropertyValues(String beanName, BeanDefinition mbd, BeanWrapper bw, PropertyValues pvs)
通过beanName,BeanDefinition,bw,pvs来初始化属性.
1.首先验证当前BeanDefinition有没有定义属性转换器,有的话,直接调用bw.setPropertyValues(mpvs);
2.再验证有没有定义用户的类型转换器。
3.设置属性值

接下来开始初始化Bean的属性值.
public void setPropertyValue(String propertyName, Object value)
根据属性名,属性值来初始化.
通过反映的方式设置此属性名为属性值.

有人可能会问题了,那如果此属性值指向另一个Bean呢,另一个Bean又指向另一个Bean,那怎么初始化

首先Bean会先初始化自己,然后再初始化Bean引用的一个Bean.[以此类推]
1.首选检测Bean定义中的构建策略.比如ByName
2.Spring会先检测属性值是不是简单属性,如果是Bean属性那么不是简单属性了.
3.判断Spring的Bean中是否包含不简单属性.
4.然后初始化ref的Bean对象,然后注册依赖,再把Ref的Bean设置到
MutablePropertyValues,最后通过以上的set过程,就大功告成了

这段时间闲来无事,专心看了下Spring的源码,有很多可取之处,但也有很多的过度设计,比如接口的独立性,接口的边界不是很清晰,太多的接口,太多的抽象类,抽象类无限继续接口,接口继承接口,抽象类继承抽象类,看似有很多共性,但是可能一个Abstractor可能继承了多个共同的接口。图下:


热点排行