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 Boot和Gradle创建AngularJS项目
- Spring AOP的理解和使用
- Spring Boot 可执行 Jar 包运行原理
- 深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码
- Dubbo和Spring Cloud微服务架构比较
- Spring复杂的BeanFactory继承体系该如何理解? ----中
- Spring XSD validation cache issue
- 深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存
- 深入理解Spring Redis的使用 (四)、RedisTemplate执行Redis脚本
- 深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化
- 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门
- 对spring默认的单列模式的理解
- 毕业设计 Spring Boot的企业销售人才培训管理系统(含源码+论文)
- 通过BeanPostProcessor理解Spring中Bean的生命周期
- Spring AOP 自定义注解获取http接口及WebService接口入参和出参
- Spring Boot整合Scheduled定时任务器、整合Quartz定时任务框架
- Spring之Bean容器源码理解,Spring4.3.12.RELEASE版本
- Spring WebFlux 要革了谁的命?
- 【Spring注解驱动开发】自定义组件如何注入Spring底层的组件?看了这篇我才真正理解了原理!!
- Spring Boot批量服务
- Spring MVC Hibernate验证器
- 《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config
- Spring Bean的生命周期
- Spring 八股文