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,) ...
随机推荐
- 把特征网络换成resnet-50
从RFCN来看,Resnet-50和Resnet-101到最后一层卷积都是缩小到原来尺寸的16分之一,并且都用的7x7的格子去roi pooling. 看paper可以知道:resnet-50核心是由 ...
- jquery-closest
1.closest() 本例演示如何通过 closest() 完成事件委托.当被最接近的列表元素或其子后代元素被点击时,会切换黄色背景: $( document ).bind("click& ...
- luogu P2078 朋友
题目背景 小明在A公司工作,小红在B公司工作. 题目描述 这两个公司的员工有一个特点:一个公司的员工都是同性. A公司有N名员工,其中有P对朋友关系.B公司有M名员工,其中有Q对朋友关系.朋友的朋友一 ...
- [模板] 动态ST表
ST表本身是不可修改的. 如果考虑增加一个数,可以把ST表反过来写,即f[i][j]表示i往前1<<j个数,一个数最多影响logn个数,常数非常小. #include<iostrea ...
- linux下使用docker方式部署ftp服务器
linux环境下部署vsftpd比较繁琐,可以直接使用docker官方仓库中的pure-ftpd镜像来部署ftp服务器. 下载镜像 docker pull stilliard/pure-ftpd:ha ...
- go语言碎片整理之标准库log
log Go语言内置的log包实现了简单的日志服务.本文介绍了标准库log的基本使用. 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法.本包也提供了一个预定义的“标 ...
- Android开发——后台获取用户点击位置坐标(可获取用户支付宝密码)
1. getevent命令 我们首先是根据adb shell getevent命令获取到被点击位置的信息. 这里要说明的是,不同的手机手机获得的点击输出是不一样的.以我的真机为例,输出如下 本文原创, ...
- cxLookupCombobox的多字段模糊匹配
查了网上很多资料,懒人输入:通过程序使用过滤对话达到自己的目的: 用到cxFilter单元: cbb_DoctorOrder.Properties.View.DataController.Filter ...
- 用python写自定义模板
模板语法有点像php !/usr/bin/env python """ #demo.py.html <html> <?py include head.p ...
- bzoj 2721[Violet 5]樱花 数论
[Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 671 Solved: 395[Submit][Status][Discuss ...