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");
spring理解一的更多相关文章
- spring理解
Struts与Hibernate可以做什么事? Struts,Mvc中控制层解决方案,可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate,持久层的解决方案:可以做到,把对象保存到 ...
- spring 理解Spring AOP 一个简单的约定游戏
应该说AOP原理是Spring技术中最难理解的一个部分,而这个约定游戏也许会给你很多的帮助,通过这个约定游戏,就可以理解Spring AOP的含义和实现方法,也能帮助读者更好地运用Spring AOP ...
- Spring理解1 ioc
Spring Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器(框架). 需要了解 ioc容器 IOC底层原理 IOC接口 BeanFactory Bean的作用域 IOC操 ...
- Spring理解IOC,DI,AOP作用,概念,理解。
IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...
- 面试-Spring理解
转自http://hui.sohu.com/infonews/article/6331404387079946240 spring呢,是pivotal公司维护的一系列开源工具的总称,最为人所知的是sp ...
- Spring理解?
(1)Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,是解决企业应用开发的复杂性,为J2EE应用提供了全方位的整合框架,在Spring框架下实现多个子框架的组合. (2)Sp ...
- Spring 理解和开始
1.先看看Spring的历史吧 https://baijiahao.baidu.com/s?id=1620099105315862154&wfr=spider&for=pc 2.Spr ...
- mybatis集成到spring理解
- Spring(DI,AOP) 理解(一)
感觉自己的spring理解的不好.所以重新开始学习. 这篇文章主要是来理解DI(依赖注入),Aop(切面) 一.DI(依赖注入,这里没有涉及到注释.只是用xml文件和Bean的方法来注册pojo,) ...
随机推荐
- [SNOI2019]数论
题目 考虑对于每一个\(a_i\)计算有多少个\(0<x\leq T-1\)满足\(x\equiv a_i(mod\ P)\)且\(x\ mod\ Q \in B\) 显然\(x=a_i+k\t ...
- kotlin - Parcelable implementations generator
本文摘自——https://kotlinlang.org/docs/tutorials/android-plugin.html Android Extensions plugin provides P ...
- grep取缩写|awk两个文件取交集
#!/bin/sh les species_latinName_abbr.txt|grep -E 'Aptenodytes|Gavia|Phoenicopterus|Chlamydotis|Phaet ...
- [模板] Miller-Rabin 素数测试
细节挺多的.. #include<iostream> #include<cstdlib> #include<cstdio> #include<ctime> ...
- 在single模式修改密码
当前是在CentOS 6.5 的命令行模式下 开机后在这个界面按随意键 接着来到新界面中,在当前选项中按下e键: 接着来到新界面,选择第二个,按下e键: 在这里我们输入single接着回车: 接着回到 ...
- Linux中vim编辑器常用命令
移动光标 Ctrl+f:屏幕向下移动一页,相当于[Page Down]按键Ctrl+b:屏幕向上移动一页,相当与[PageUp]按键 0或功能键[Home]:数字‘0’:移动到这一行的最前面的字符处$ ...
- 特殊权限和facl
目 录 第1章 FACL访问控制 1 1.1 FACL简介 1 1.2 getfacl命令查看acl权限 1 1.3 setfacl设置文件的cal权限 1 1.4 批量添加a ...
- 20. Valid Parentheses (python版)
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- 昨天去面试,这5个Python面试题都被考到了,Python面试题No6
第1题:字符串的拼接–如何高效的拼接两个字符串? 字符串拼接的几种方法 加号 逗号 直接连接 格式化 join 多行字符串拼接() 加号 print('Python' + 'Plus') 逗号 pri ...
- DEVExpress中BarItem的使用2
没有验证LookUpEdit与ComBox的区别. 没有验证ZoomTrackBarControl的使用方法. SparkLine看着也蛮有趣,需要绑定数据源控件的均没有验证. 前一节介绍的BarIt ...