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,) ...
随机推荐
- PHP17 PDO
学习要点 PDO简要 PDO对象 PDO对象的使用 PDOStatement对象 PDO事务处理 PDO简要 PHP支持那些数据库操作 MySQL,Oracle,SQLServer,SQLite.Po ...
- 制作SD更新系统时和用mfgtool工具烧录时,文件如何替换?
制作SD更新系统时和用mfgtool工具烧录时,文件如何替换? 答:制作SD更新系统时,请按照需求选择不同mfgimages-myd*文件夹.每个文件夹里面有一个Manifest文件, 里面规定了ub ...
- Git Bash 常用指令
1. 关于git bash常用指令 推荐博客: 史上最简单的 GitHub 教程 猴子都能懂的GIT入门 Learn Version Control with Git for Free Git Do ...
- 常用字符串匹配算法(brute force, kmp, sunday)
1. 暴力解法 // 暴力求解 int Idx(string S, string T){ // 返回第一个匹配元素的位置,若没有匹配的子串,则返回-1 int S_size = S.length(); ...
- Linux CentOS 知识和常用命令
1.常用热键 [Tab]它具有“命令补全”与“文件补全”的功能[Ctrl+C]中断执行中的程序组合键[Ctrl+d]键盘输入结束.也可以用来替代 exit 2.Linux 常用编辑器 vi 和 vim ...
- Python3--中括号"[]"与冒号":"在列表中的作用
先来定义两个列表: liststr = ["helloworld","hahahh","123456"] listnum = [1,2,3, ...
- 分分钟钟学会Python - 函数(function)
函数(function) 1 基本结构 本质:将多行代码拿到别处并起个名字,以后通过名字就可以找到这行代码并执行 应用场景: 代码重复执行 代码量很多超过一屏,可以选择通过函数进行代码的分割 写代码方 ...
- 算法导论 第八章 线性时间排序(python)
比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比 ...
- JSP表达式语言(EL)
JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP EL表达式内可以使用整数型.浮点型.字符串.常量 ...
- pycharm配置git--图文教程
1. 下载git客户端 2. File->Default Setting-> Version Control->Git 3. Path to Git exec ...