------------------siwuxie095

 
 

 
 

 
 

 
 

 
 

 
 

 
 

Spring 通过一个配置文件描述 Bean 和 Bean 之间的依赖关系,

利用 Java 语言的反射功能实例化 Bean,并建立 Bean 之间的

依赖关系

 
 

Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了

Bean 实例缓存、生命周期管理、Bean 实例代理、事件发布


资源装载
等高级服务

 
 

 
 

 
 

BeanFactory 是 Spring 框架最核心的接口,它提供了高级 IoC 的

配置机制,BeanFactory
使管理不同类型的
Java 对象成为可能

 
 

ApplicationContext
建立在
BeanFactory
基础之上,提供了更多面向应用

的功能,它提供了国际化支持和框架事件体系,更易于创建实际应用

 
 

一般称
BeanFactory

IoC
容器,而称
ApplicationContext

应用上下文

 
 

 
 

二者的区分:

 
 

BeanFactory

Spring
框架的基础设施,面向
Spring
本身

 
 

ApplciationContext
面向使用
Spring
框架的开发者,几乎所有的应用

场合都直接使用
ApplicationContext,而非底层的
BeanFactory

 
 

 
 

 
 

 
 

BeanFactory 的介绍

 
 

 
 

BeanFactory
是一个类工厂,但和传统的类工厂不同,传统的类工厂

仅负责构造一个
或几个类的实例,而
BeanFactory
是类的通用工厂,

它可以创建并管理各种类的对象

 
 

这些可被创建和管理的对象本身没有什么特别之处,它们仅仅是一个

POJO,Spring 称这些被创建和管理的 Java 对象为
Bean

 
 



Spring
中,Java
对象的范围更加宽泛

 
 

 
 

 
 

BeanFactory
接口位于类结构树的顶端,它最主要的方法就是

getBean(String beanName),该方法从容器中返回特定名称


Bean,BeanFactory
的功能通过其他接口得到不断扩展 

 
 

 
 

BeanFactory
的类体系结构:

 
 

(1)XmlBeanFactory

 
 

Spring

BeanFactory
提供了多种实现类,最常用的是
XmlBeanFactory

 
 

 
 

(2)ListableBeanFactory

 
 

该接口定义了访问容器中
Bean
基本信息的若干方法,如:查看
Bean
的个数,

获取某一类型
Bean
的配置名,或
查看容器中是否包含某一
Bean …

 
 

 
 

(3)HierarhicalBeanFactory

 
 

父子级联
IoC
容器的接口,子容器可以通过接口方法访问父容器

 
 

 
 

(4)ConfigurableBeanFactory

 
 

该接口增强了
IoC
容器的可定制性,它定义了设置类装载器、属性

编辑器、容器初始化后置处理器等方法

 
 

 
 

(5)AutowireCapableBeanFactory

 
 

定义了将容器中的
Bean
按某种规则(如:按名称匹配、按类型匹配)

进行自动装配的方法

 
 

 
 

(6)SingletonBeanFactory

 
 

定义了允许在运行期间向容器注册单实例
Bean
的方法

 
 

 
 

(7)BeanDefinitionRegistry

 
 

Spring
配置文件中每一个
Bean 节点元素在 Spring 容器里都通过一个

BeanDefinition
对象表示,它描述了
Bean
的配置信息

 
 


BeanDefinitionResgistry
接口提供了向容器手工注册
BeanDefinition

对象的方法

 
 

 
 

 
 

 
 

BeanFactory 的初始化顺序:

 
 

(1)创建配置文件

(2)装载配置文件

(3)启动
IoC
容器

(4)获取
Bean
实例

 
 

 
 

通过
BeanFactory
启动
IoC
容器时,并不会初始化配置文件

中定义的
Bean,初始化动作发生在第一个调用的时候

 
 

对于单实例的
Bean
来说,BeanFactory
会缓存
Bean
实例,

所以第二次使用
getBean()
方法时就可以直接从
IoC
容器的

缓存中获取
Bean
实例 

 
 

 
 

另外,在初始化
BeanFactory
时必须为其提供一种日志框架,

一般使用
Log4J,即在类路径下提供
Log4J
的配置文件,这

样,启动
Spring
容器时才不会报错

 
 

 
 

 
 

 
 

ApplicationContext 的介绍

 
 

 
 

如果说
BeanFactory

Spring
的心脏,那么
ApplicationContext

就是完整的身躯

 
 

ApplicationContext 由BeanFactory派生而来,提供了很多实际应用

的功能。在
BeanFactory
中,很多功能需要以编程的方式实现,而在

ApplicationContext
中则可以通过配置的方式实现

 
 

 
 

 
 

ApplicationContext 的具体实现类:

 
 

(1)ClassPathXmlApplicationContext

 
 

从类路径中加载配置文件

 
 

 
 

(2)FileSystemXmlApplicationContext

 
 

从文件系统中加载配置文件

 
 

 
 

(3)ConfigurableApplicationContext

 
 

扩展自
ApplicationContext,新增了两个主要方法
reflesh() 和

close()。这让
ApplicationContext
具有启动、刷新和关闭应用

上下文的能力

 
 

在应用上下文关闭的情况下调用
reflesh() 即可启动应用上下文,

在已经启动的状态下调用
reflesh() 即可清除缓存并且重新装载

配置信息,调用
close() 方法则可以关闭应用上下文

 
 

 
 

 
 

ApplicationContext
通过许多其他接口扩展了
BeanFactory
的功能

 
 

ApplicationContext 的扩展接口:

 
 

(1)ApplicationEventPublisher

 
 

它让容器拥有发布应用上下文事件的功能,包括容器启动事件、

关闭事件等

 
 

实现了
ApplicationListener 事件监听接口的
Bean 可以接收到

容器事件, 并对容器事件进行响应处理

 
 


ApplicationContext 抽象实现类
AbstractApplicationContext 中,

可以发现存在一个
ApplicationEventMulticaster,它负责保存所有监

听器,以便在容器产生上下文事件时通知这些事件监听器

 
 

 
 

(2)MessageSource

 
 

为容器提供了
I18N
国际化信息访问的功能

 
 

 
 

(3)ReaourcePatternResolver

 
 

所有
ApplicationContext 实现类都实现了类似于

PathMatchingResourcePatternResolver 的功能,

可以通过带前缀
Ant
风格的资源类文件路径来装载

Spring
的配置文件

 
 

 
 

(4)LifeCycle

 
 

该接口是
Spring 2.0 加入的,提供了
start()

stop()
两个方法,

主要用于控制异步处理过程

 
 

在具体使用时,该接口同时被
ApplicationContext 实现及具体
Bean 实现,

ApplicationContext 会将
start/stop 的信息传递给容器中所有实现了该接

口的
Bean,以达到管理和控制
JMX、任务调度等目的

 
 

 

 
 


BeanFactory
初始化相似,ApplicationContext
的初始化也很简单,

根据配置文件路径不同可选择不同的实现类加载:

 
 

(1)ClassPathXmlApplicationContext:配置文件在类路径下

 
 

(2)FileSystemXmlApplicationContext:配置文件在文件系统路径下

 

 
 

 
 

 
 

Bean
的实例化问题:

 
 

 ApplicationContext 的初始化和 BeanFactory 有一个重大的区别:

 
 

BeanFactory
在初始化容器时,并未实例化
Bean,直到第一次访问某个

Bean 时才实例目标
Bean,而
ApplicationContext 则在初始化应用上

下文时就实例化所有单实例的
Bean 

 
 

 
 

 
 

 
 

 
 

 
 

【made by siwuxie095】

BeanFactory和ApplicationContext的介绍的更多相关文章

  1. BeanFactory和ApplicationContext的简单介绍

    引言 Spring通过一个配置文件描述Bean及Bean之间的依赖关系,利用Java语音的反射功能实例化Bean并建立Bean之间的依赖关系.Spring的IoC容器在完成这些底层工作的基础上,还提供 ...

  2. BeanFactory与ApplicationContext

    本文总结自:https://www.cnblogs.com/xiaoxi/p/5846416.html 我们常说的Spring容器(即Spring Ioc 容器),是如何创建bean的? BeanFa ...

  3. Spring容器、BeanFactory和ApplicationContext,及3种装配Bean的方式

    目录 一. spring容器理解 二. BeanFactory和ApplicationContext之间的关系 三. BeanFactory详情介绍 四.ApplicationContext介绍 五. ...

  4. Spring(二)核心容器 - 简介 、BeanFactory、ApplicationContext

    目录 前言 1.容器简介 2.容器的结构 2.1 BeanFactory 2.2 ApplicationContext 2.2.1 ConfigurableApplicationContext 2.2 ...

  5. 理解Spring 容器、BeanFactory 以及 ApplicationContext

    一.spring 容器理解 spring 容器可以理解为生产对象(Object)的地方,在这里容器不只是帮助我们创建对象那么简单,它负责了对象的整个生命周期-创建.装配.销毁.而这里对象的创建管理的控 ...

  6. Spring系列之beanFactory与ApplicationContext

    一.BeanFactoryBeanFactory 是 Spring 的“心脏”.它就是 Spring IoC 容器的真面目.Spring 使用 BeanFactory 来实例化.配置和管理 Bean. ...

  7. BeanFactory和ApplicationContext的区别

     1.BeanFactory和ApplicationContext的异同点: 相同点:     两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比 ...

  8. BeanFactory和ApplicationContext的作用和区别

    BeanFactory和ApplicationContext的作用和区别 作用: 1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责be ...

  9. spring中的BeanFactory与ApplicationContext的作用和区别?

    BeanFactory类关系继承图 1. BeanFactory类结构体系: BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂, ...

随机推荐

  1. 每天一个Linux命令(23)chmod命令

        chmod命令用来变更文件或目录的权限. 在UNIX系统家族里,文件或目录权限的控制分别以读取.写入.执行3种一般权限来区分,另有3种特殊权限可供运用.用户可以使用chmod指令去变更文件与目 ...

  2. 【转载】xtrabackup原理及实施

    转载于:http://www.baidu-ops.com/2013/05/26/xtrabackup/ xtrabackup是基于InnoDB存储引擎灾难恢复的.它复制InnoDB的数据文件,尽管数据 ...

  3. CSS3制作分步注册表单

    这个DEMO是使用CSS3制作的一个分步注册表单,每个input对应的是每一步,在表单得到焦点时,对应的step也会进行对应的改变.不过这个效果是使用js代码来实现,但整个表单的外观是由CSS3来完成 ...

  4. 十大最流行PHP框架排名

    PHP 是一个被广泛使用的来进行Web开发的脚本语言.虽然有很多其它可供选择的Web开发语言,像:ASP 和Ruby,但是PHP是目前为止世界上最为流行的. 那么,是什么让PHP如此流行?PHP 如此 ...

  5. Eclipse_插件_01_tomcat插件的安装

    1.Eclipse的tomcat插件下载地址: (1)https://sourceforge.net/projects/tomcatplugin/files/updatesite/plugins/ ( ...

  6. Java_异常_02_java.lang.NoClassDefFoundError: org/apache/log4j/Level

    总结:解析Json时,除了要导入json-lib-2.2-jdk15.jar外,还要导入: commons-beanutils.jar, commons-httpclient.jar, commons ...

  7. SSH Secure Shell 的使用

    一,安装Secure Shell ,之后会出现SSH Secure Shell client 和SSH Secure File Transfer client 两个快捷方式. 需要服务器的IP地址,用 ...

  8. es6的foreach循环遍历

    forEach forEach是Array新方法中最基本的一个,就是遍历,循环.例如下面这个例子: 结果: 这段代码相当于: for (var k = 0, length = array.length ...

  9. 表达式计算-----------eval()运算符

    1.java的eval()方法(或称之为运算符)可以将字符串解析成可以运行的javaScript代码,例如 eval()只有一个参数.如果传入的参数不是一个字符串,那么它会直接返回这个参数.如果传入的 ...

  10. FEC之我见一

    顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是 纠错神髓:收到的媒体包+冗余包 >= 原始媒体包数据   直到满足 收到的媒体包+ 冗余包 >= 原始媒 ...