spring理解一
spring基本工作原理例如以下:
1.查找bean配置文件
2.载入bean配置文件并解析生成中间表示BeanDefinition
3.注冊beanDefinition
4.假设是单例或lazy-init=false,则直接生成bean
spring将
1.查找bean配置文件
2.载入bean配置文件并解析生成中间表示BeanDefinition
3.注冊beanDefinition
这三部分开,能够提供很多其它的定制给用户。
spring将配置文件之类的文件资源抽象成一个Resource,封装了getInputStream。isClose等方法。
Resource有子类ClasspathResouce及FileSystemResource
Resouce攻克了第一步查找bean配置文件的问题
接着要解决第二步载bean配置文件并解析生成中间表示BeanDefinition。
spring这个是通过BeanDefinitionReader(接口)去做。
BeanDefinitionReader有实现XmlBeanDefinitionReader等。
XmlBeanDefinitionReader有个參数为容器BeanRegistry用于存放解析后的BeanDefinition。
即BeanDefinitionReader能够分三步完毕第二步任务:1.将Resource中的inputStream解析成xml的Dom形式 2.依据Dom。生成BeanDefinition 3.注冊到BeanRegistry中
这里将resource解析成Dom是用还有一个类DefaultDocumentLoader去做。
解析xml生成BeanDefinition则交给:BeanDefinitionParserDelegate去做。
注冊BeanDefinition就简单了,由于BeanRegitry容器是做为參数进入XmlBeanDefinitionReader的,所以直接调就能够了。
能够看出spring设计XmlBeanDefinitionReader类时。将这个类的职责分解,并将每一部分任务交给对应的类去做。
样例:
ClassPathResource res=new ClassPathResource("containerTest.xml"); //定位资源
DefaultListableBeanFactory factory=new DefaultListableBeanFactory(); //BeanRegistry容器
XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory); //
int n=reader.loadBeanDefinitions(res); //触发,XmlBeanDefinitionReader载入,解析配置文件,生成BeanDefinition的动作
B b=(B) factory.getBean("b");
最新文章
- likely &;&; unlikely in GCC
- 设计模式C#实现(十)——桥接模式
- C#获取文件/字节数组MD5值方法
- C#壓縮文件幫助類 使用ICSharpCode.SharpZipLib.dll
- SQL Server取系统当前时间【转】
- kali linux 2.0 折腾笔记
- yo bootstrap mui 使用对比
- ecshop图片上传JPEG格式失败问题
- JAVA接口基础知识总结
- EBS并发程序监控
- python3实现二叉树的遍历与递归算法解析
- ipv4-only网络环境下访问ipv6站点
- HDU4403-模拟、数学
- python-部分redis
- Reader 与 Guava MultiReader
- jQuery中绑定事件的几种方法
- Mysql与InnoDB优化
- python存取数据进阶技巧-pickle,array模块
- C#学习之泛型功能与限制
- C#音视频网络流解码:H264视频和ACC音频