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 ...
随机推荐
- [C++基础]那些容易被混淆的概念:函数/数组指针-指针函数/数组,类/函数模板-模板类/函数
函数指针-指针函数 函数指针的重点是指针.表示的是一个指针,它指向的是一个函数.eg: int (*pf)(); 指针函数的重点是函数.表示的是一个函数,它的返回值是指针.eg: int* fun() ...
- 将项目的版本控制从Vss迁移到Git
之前在Vs2008上一直使用的是Vss版本控制,现在将版本控制更改为Git 迁移原因是其他公司想要在我们公司开发的一个CRM系统做一些定制(个性化需求,将软件上的公司名称和链接更改为他们的或一些跟我们 ...
- 给你的webstorm添加快速生成注释得快捷键
打开File----setting-map-搜搜"fix doc"
- ASP.NET找不到类型或命名空间名称怎么办
如图所示,运行之后提示找不到类型或空间名称,右击有波浪线的代码,选择解析,using XXX 随后自动补上了程序集引用
- 无法加载Dll”ArcGISVersion.dll”:0x8007007E
在Win7x64位环境下,无法加载Dll"ArcGISVersion.dll":找不到指定的模块 解决方案: 打开项目的属性-生成-常规-目标平台,选择X86. 参考:http:/ ...
- 【转】DNS查询过程
DNS查询过程 DNS的查询过程是指在客户端通过DNS服务器将一个IP地址转换为一个FQDN(Fully Qualified Domain Name,完全合格的域名),或将一个FQDN转化为一个IP地 ...
- Java程序员的C++回归路(二)
接前: 之前记录的笔记,终于想起来上传完整. 第7章: 类 定义抽象数据类型 任何对成员对象的访问都可以解释为使用this来访问,即this->member. =default :默认构造函数. ...
- TP框架中field查询字段
TP框架中field查询字段 不是fields 也不是files !!!! 不是fields 也不是files !!!! 不是fields 也不是files !!!! 不是fields 也不是file ...
- 将图片转成base64字符串并在JSP页面显示的Java代码
*本事例主要讲了如下几点: * 1:将图片转换为BASE64加密字符串. * 2:将图片流转换为BASE64加密字符串. * 3:将BASE64加密字符串转换为图片. * 4:在jsp文件中以引 ...
- xftp Initialize Flexnet Service failed / Error code: 50003
xftp Initialize Flexnet Service failed / Error code: 50003 CreateTime--2018年5月3日15:47:05 Author:Ma ...