XmlFactoryBean和DefaultListableBeanFactory学习
首先提供了一个Spring容器最简单的例子。
bean的定义,MyTestBean.java
- public class MyTestBean {
- private String testStr = "testStr";
- public String getTestStr() {
- return testStr;
- }
- public void setTestStr() {
- this.testStr = testStr;
- }
- }
配置文件的定义,beanFactoryTest.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.Springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.Springframework.org/schema/beans
- http://www.Springframework.org/schema/beans/Spring-beans.xsd">
- <bean id="myTestBean" class="bean.MyTestBean" />
- </beans>
测试代码,BeanFactoryTest.java
- @SuppressWarnings("deprecation")
- public class BeanFactoryTest {
- @Test
- public void testSimpleLoad() {
- BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml");
- MyTestBean bean = (MyTestBean) bf.getBean("myTestBean");
- assertEquals("testStr", bean.getTestStr());
- }
- }
那么在这个测试中有一个关键的类就是现在要学习一下的XmlBeanFactory。
这段测试代码完成的功能无非一下几点:
(1)读取配置文件beanFactoryTest.xml
(2)根据beanFactoryTest.xml中的配置找到对应的类的配置,并实例化。
(3)调用实例化后的实例。
- public class XmlBeanFactory extends DefaultListableBeanFactory {
- private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
- /**
- * 根据给定的可以用DOM进行解析的resource创建一个新的XmlBeanFactory
- * @param 代表resource的XML资源, 用来加载bean的定义
- * @throws 一旦有加载或者解析异常即抛出BeansException异常
- */
- public XmlBeanFactory(Resource resource) throws BeansException {
- this(resource, null);
- }
- /**
- * 用给定的可用DOM解析的输入流创建一个新的XmlBeanFactory
- * @param 代表resource的XML资源, 用来加载bean的定义
- * @param parentBeanFactory 父bean工厂
- * @throws 一旦有加载或者解析异常即抛出BeansException异常
- */
- public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
- super(parentBeanFactory);
- this.reader.loadBeanDefinitions(resource);
- }
- }
上面就是XmlBeanFactory.java的源码了,看上去也非常简单。
值得学习的是:
(1)用了两个构造函数,在一个中调用了另一个,实现了不同的逻辑
(2)Spring中有父子容器,这个点我还没有弄懂
类图结构就是这样的。
然后时序图是这样的:
跟之前说的一样,先是加载类资源:new ClassPathResource("beanFactoryTest.xml"),后续的资源处理就可以用Resource提供各种服务来操作了。
然后利用XmlBeanDefinitionReader读取bean的定义,最后实例化一个容器出来。
下一节会学习配置文件的封装,也就是从读取xml配置文件到内存中成为Resource的过程。
之前也有写过这方面的学习过程,但是写的东西太杂了,又没有回头巩固,感觉忘得很快。
XmlFactoryBean和DefaultListableBeanFactory学习的更多相关文章
- Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory
前言 在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程. 入口 从 ...
- Spring源码学习之IOC容器实现原理(一)-DefaultListableBeanFactory
从这个继承体系结构图来看,我们可以发现DefaultListableBeanFactory是第一个非抽象类,非接口类.实际IOC容器.所以这篇博客以DefaultListableBeanFactory ...
- [spring源码学习]二、IOC源码——配置文件读取
一.环境准备 对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子: package com.zjl; public cl ...
- Spring IoC容器初始化过程学习
IoC容器是什么?IoC文英全称Inversion of Control,即控制反转,我么可以这么理解IoC容器: 把某些业务对象的的控制权交给一个平台或者框架来同一管理,这个同一管理的平台可以称为I ...
- spring源码学习之路---深度分析IOC容器初始化过程(四)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近由于工作和生活,学习耽搁 ...
- Spring 源码学习
spring最核心的理念是IOC,包括AOP也要屈居第二,那么IOC到底是什么呢,四个字,控制反转 一.什么是Ioc/DI? IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等. 先从我们 ...
- Spring入门学习(一)
SpringMVC基础平台补充(2016.03.03) 如果想要开发SpringMVC,那么前期依次安装好:JDK(jdk-8u74-windows-x64,安装后配置环境变量JAVA_HOME和CL ...
- Spring IOC及AOP学习总结
一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.还有一类是ApplicationContext.BeanFactory提供了基础的容器功能.Appl ...
- Spring IOC核心源码学习
1. 初始化 大致单步跟了下Spring IOC的初始化过程,整个脉络很庞大,初始化的过程主要就是读取XML资源,并解析,最终注册到Bean Factory中: 在完成初始化的过程后,Bean们就在B ...
随机推荐
- java学习笔记11--集合总结
java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...
- [Python爬虫] 之八:Selenium +phantomjs抓取微博数据
基本思路:在登录状态下,打开首页,利用高级搜索框输入需要查询的条件,点击搜索链接进行搜索.如果数据有多页,每页数据是20条件,读取页数 然后循环页数,对每页数据进行抓取数据. 在实践过程中发现一个问题 ...
- TensorFlow 入门 上(自用)
下文会出现的一些知识点:TensorFlow的计算模型.数据模型.运行模型,TensorFlow的工作原理. 两个重要概念——Tensor和Flow: Tensor是张量,在TensorFlow中可以 ...
- C# 使用int.TryParse,Convert.ToInt32,(int)将浮点类型转换整数时的区别
int.TryParse,Convert.ToInt32,(int) 这几种类型在将浮点类型转换整数时是有差别 Convert.ToInt32则会进行四舍五入 int.TryParse只能转换整数,即 ...
- 自定义错误信息并写入到Elmah
在ap.net Web项目中一直使用Elmah进行日志记录, 但一直有一个问题困扰我很久,那就是我如何自己生成一个错误并记录到Elmah里去. 你知道有时你需要在项目中生成一个错误用于一些特殊的需求 ...
- SQL SERVER: 合并相关操作(Union,Except,Intersect)
SQL SERVER: 合并相关操作(Union,Except,Intersect) use tempdb create table tempTable1 (id int primary key id ...
- Windows Store GIF player 诞生记
在Win8上面,Image source切换的时候有bug.当我们短时间定时切换的时候,Image不能正常地显示对应的图片.Image控件又不支持GIF播放,所以GIF图片的播放就是一个非常头痛的问题 ...
- 一次安装win10 ubuntu16.0经过记录
步骤摘要 三个U盘: 1.制作WIN8 PE启动盘,使用的软件为“U深度装机版”,可自行百度下载 2.制作WIN10系统安装盘,使用UltraISO,这里使用的win10镜像为: 链接: http:/ ...
- Python -- 标准库 文件管理 (部分os包,shutil包)
在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令.Python标准库则允许我们从Python内部管理文件.相同的目的,我们有了两条途径.尽管在Python调用标准库的 ...
- Webkit初始化以及载入URL过程中各种对象的建立时序以及DOM树的建立详情分析
众所周知,Webkit须要创建DOM树. 为此它须要创建WebView, Chrome,Page,Frame, Document. Document Parser, DOM Tree ...