首先提供了一个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学习的更多相关文章

  1. Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory

    前言 在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程. 入口 从 ...

  2. Spring源码学习之IOC容器实现原理(一)-DefaultListableBeanFactory

    从这个继承体系结构图来看,我们可以发现DefaultListableBeanFactory是第一个非抽象类,非接口类.实际IOC容器.所以这篇博客以DefaultListableBeanFactory ...

  3. [spring源码学习]二、IOC源码——配置文件读取

    一.环境准备 对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子: package com.zjl; public cl ...

  4. Spring IoC容器初始化过程学习

    IoC容器是什么?IoC文英全称Inversion of Control,即控制反转,我么可以这么理解IoC容器: 把某些业务对象的的控制权交给一个平台或者框架来同一管理,这个同一管理的平台可以称为I ...

  5. spring源码学习之路---深度分析IOC容器初始化过程(四)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近由于工作和生活,学习耽搁 ...

  6. Spring 源码学习

    spring最核心的理念是IOC,包括AOP也要屈居第二,那么IOC到底是什么呢,四个字,控制反转 一.什么是Ioc/DI? IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等. 先从我们 ...

  7. Spring入门学习(一)

    SpringMVC基础平台补充(2016.03.03) 如果想要开发SpringMVC,那么前期依次安装好:JDK(jdk-8u74-windows-x64,安装后配置环境变量JAVA_HOME和CL ...

  8. Spring IOC及AOP学习总结

    一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.还有一类是ApplicationContext.BeanFactory提供了基础的容器功能.Appl ...

  9. Spring IOC核心源码学习

    1. 初始化 大致单步跟了下Spring IOC的初始化过程,整个脉络很庞大,初始化的过程主要就是读取XML资源,并解析,最终注册到Bean Factory中: 在完成初始化的过程后,Bean们就在B ...

随机推荐

  1. Android -- Broadcast接收

    Broadcast是Android四大组件之一,是一种广泛运用的在应用程序之间传输信息的机制.最经典的举例是: “我们拿广播电台来做个比方.我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特 ...

  2. (队列的应用5.3.1)ZOJ 3210 A Stack or A Queue?根据进入结构的序列和离开结构的序列确定是stack还是queue)

    /* * ZOJ_3210.cpp * * Created on: 2013年10月30日 * Author: Administrator */ #include <iostream> # ...

  3. 分治算法——Karastsuba算法

    分治(Divide and Conquer)算法:问题能够分解为子问题,每一个问题是能够独立的解决的,从子问题的解能够构建原问题. Divide:中间分.随机分.奇偶分等,将问题分解成独立的子问题 C ...

  4. Java学习笔记七(目录操作)

    1.介绍 上一篇博客介绍的是java中经常使用的操作文件的方式,本篇博客着重解说一下,在Java中是怎样来操作目录的.主要是利用的是Java.IO包以下的File类,本篇博客着重解说一下该类的构造函数 ...

  5. IOS:Camera的特性分析与使用

    Camera是IOS中很重要的一个信息获取途径. 以下我们主要从硬件特性以及软件特性两个方面来看看Canera的使用,先来看看软件上我们使用Camera都能干点什么. 先来看看以下一张图: 相机软件部 ...

  6. VS下控制台执行保持(不要一闪而过)

    曾经上课的时候是用VC++6.0来学习编程的,编完打印出来的东西就直接显示在控制台上.而在Visual Studio下会出现控制台一闪而过的情况.这个问题事实上是非常好解决的.方法有多种.以下列举两种 ...

  7. 01-maven环境配置

    一,下载maven.进入官网,点击downland,选择相应的版本下载. 2, 二,解压到相应目录下. 例如下载如下: 解压到该路径: 三,配置环境变量,新建一个maven_Home的变量,值为有bi ...

  8. 对固态硬盘ssd进行4k对齐

    别让SSD成半吊子!你真的4K对齐了吗? http://ssd.zol.com.cn/537/5374950_all.html SSD固态硬盘一键分区后如何检测4K对齐? http://pcedu.p ...

  9. phpcms 留言板

    相信很多用phpcms v9的站长都不是程序员,而我也是一个网页设计师,所以对制作模板还是可以对付的.但是一设计到自己写程序,就一个头两个大啦.之前公司的网站是用找别人 用dede cms做的,后来我 ...

  10. VS2010 DLL库生成和使用

    一.生成dll文件(VS2010 Win32 程序) CreateDll.h // 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法.此 DLL 中的所有文件都是用命令行上定义的 ...