spring-bean定义的载入与解析
2020-12-04 01:18:26 0 举报
AI智能生成
spring beanDefinition的载入与解析(csdn博客yeleits)
作者其他创作
大纲/内容
静态工厂方法 vs. 工厂模式
静态工厂方法:返回实例的静态方法
工厂模式
简单工厂模式:1个工厂类 + 1个抽象产品类(多个产品类继承)
工厂方法模式:1个抽象方法的工厂类(多个工厂类继承) + 1个抽象产品类(多个产品类继承)
抽象工厂模式:多个抽象方法的工厂类(多个工厂类继承) + 多个抽象产品类
IOC
xml配置文件
document
Element
解析default元素
标签:import
属性:resource
功能:引入指定资源
如何解析:递归调用loadBeanDefinitions
标签:alias
属性:name、alias
如何存储:存入<b><font color="#c41230">BeanDefinitionRegistry接口实现类:<br></font></b>Map<String,String><string, string=""> aliasMap,键=alias的值,值=name的值</string,>
标签:bean
1. 构建BeanDefinition
解析bean标签
2. 构建BeanDefinitionHolder
3. 放入<b><font color="#c41230">BeanDefinitionRegistry接口实现类</font></b>:<br>Map<String, BeanDefinition> beanDefinitionMap
4. 发送注册事件->ReaderEventListener
标签:beans<br>
解析custom元素
解析bean标签
属性
功能
abstract:取值boolean,true表示不实例化
parent:取值其它bean的id,从指定的其它bean继承属性
autowire
取值no:用子标签<ref>实现依赖注入
取值byType
取值byName
depends-on:取值其它bean的id,表明实例化(销毁)顺序
init-method:取值该bean的某方法名,<b><font color="#c41230">表示构造器实例化后立即执行初始化方法</font></b>
autowire-candidate:取值boolean,是否自动装配的候选项,该实例不参与自动注入
primary:是否自动装配的优先选项
factory-method:静态工厂方法(class=静态工厂全类名)
factory-bean + factory-method:工厂模式
如何存储:映射到<b><font color="#c41230">B</font></b><font color="#c41230"><b>eanDefinition类</b></font>的各字段
子标签
description
映射到<font color="#c41230"><b>BeanDefinition类</b></font>:String description
meta:key、value属性
存入<b style="color: rgb(196, 18, 48);">BeanDefinition类</b><b style=""><font color="#381e11">:</font></b>Map<String, Object> attributes
lookup-method
属性:name取值方法名、bean取值其它bean的id
功能:替换方法返回值,用<font color="#0076b3"><b>属性bean</b></font>作为<b style=""><font color="#0076b3">name</font></b>方法的返回值
如何存储:构建<b><font color="#c41230">LookupOverride类</font></b>,存入<b><font color="#c41230">BeanDefinition类</font></b>:MethodOverrides methodOverrides
replaced-method
属性:name取值方法名、replacer取值其它bean的id
子标签:arg-type取值方法的参数类型
功能:替换执行的方法
如何存储:构建<b><font color="#c41230">ReplaceOverride类</font></b>,存入<b><font color="#c41230">BeanDefinition类</font></b>:MethodOverrides methodOverrides
construct-arg
属性:index、ref、value
子标签:ref、idref、bean、value、array、list、map...
如何解析存储:
(1) 解析得到Obejct value
有ref属性:返回<b><font color="#c41230">RuntimeBeanReference类</font></b>
有value属性:返回<b><font color="#c41230">TypedStringValue类</font></b>
有子标签:
bean:返回<b><font color="#c41230">BeanDefinitionHolder类</font></b>
ref:返回<b><font color="#c41230">RuntimeBeanReference类</font></b>
idref:返回<b><font color="#c41230">RuntimeBeanNameReference类</font></b>
value:返回<b><font color="#c41230">TypedStringValue类</font></b>
array、list...:返回自定义容器
(2) 构建<font color="#c41230"><b>ConstructorArgumentValues.ValueHolder类</b></font>
(3) 存储
<span style="font-size: inherit;">有属性index</span><br>
放入BeanDefinition类的<b><font color="#c41230">ConstructorArgumentValues字段</font></b>的<br>Map<Integer, ValueHolder> indexedArgumentValues
无属性index
放入BeanDefinition类的<b><font color="#c41230">ConstructorArgumentValues字段</font></b>的<br>List<ValueHolder> genericArgumentValues
property
属性:name
子标签:同construct-arg
如何解析存储:
(1) 解析得到Object value(同construct-arg)
<span style="font-size: inherit;">(2) 构建</span><b style="font-size: inherit;"><font color="#c41230">PropertyValue类</font></b><br>
(3) 存储:放入<b><font color="#c41230">BeanDefinition类</font></b>的<b><font color="#c41230">MutablePropertyValues字段</font></b>的List<PropertyValue> propertyValueList
0 条评论
下一页