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
如何存储:存入font color=\"#c41230\
标签:bean
1. 构建BeanDefinition
解析bean标签
2. 构建BeanDefinitionHolder
3. 放入font color=\"#c41230\
4. 发送注册事件->ReaderEventListener
标签:beans
解析custom元素
属性
功能
abstract:取值boolean,true表示不实例化
parent:取值其它bean的id,从指定的其它bean继承属性
autowire
取值no:用子标签<ref>实现依赖注入
取值byType
取值byName
depends-on:取值其它bean的id,表明实例化(销毁)顺序
init-method:取值该bean的某方法名,表示构造器实例化后立即执行初始化方法
primary:是否自动装配的优先选项
factory-method:静态工厂方法(class=静态工厂全类名)
factory-bean + factory-method:工厂模式
如何存储:映射到BeanDefinition类的各字段
子标签
description
映射到BeanDefinition类:String description
meta:key、value属性
存入b style=\
lookup-method
属性:name取值方法名、bean取值其它bean的id
功能:替换方法返回值,用属性bean作为name方法的返回值
如何存储:构建LookupOverride类,存入BeanDefinition类:MethodOverrides methodOverrides
replaced-method
属性:name取值方法名、replacer取值其它bean的id
子标签:arg-type取值方法的参数类型
功能:替换执行的方法
如何存储:构建ReplaceOverride类,存入BeanDefinition类:MethodOverrides methodOverrides
construct-arg
属性:index、ref、value
子标签:ref、idref、bean、value、array、list、map...
如何解析存储:
(1) 解析得到Obejct value
有ref属性:返回RuntimeBeanReference类
有value属性:返回TypedStringValue类
有子标签:
bean:返回BeanDefinitionHolder类
ref:返回RuntimeBeanReference类
idref:返回RuntimeBeanNameReference类
value:返回TypedStringValue类
array、list...:返回自定义容器
(2) 构建ConstructorArgumentValues.ValueHolder类
(3) 存储
有属性index
放入BeanDefinition类的font color=\"#c41230\
无属性index
放入BeanDefinition类的ConstructorArgumentValues字段的List<ValueHolder> genericArgumentValues
property
属性:name
子标签:同construct-arg
(1) 解析得到Object value(同construct-arg)
(2) 构建PropertyValue类
(3) 存储:放入BeanDefinition类的MutablePropertyValues字段的List<PropertyValue> propertyValueList
0 条评论
回复 删除
下一页