Spring 容器

Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口。

他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。

Bean是Spring管理的基本单位,在基于Spring的JavaEE应用中,所有的组件都被当成Bean处理,包括数据源、Hibernate的SessionFactory、事务管理器等。

BeanFactory:

Spring容器最基本的接口就是BeanFactory,该接口负责配置、创建,管理Bean,它有一个子接口;AppcationContext,因此也被称为Spring上下文。Spring容器还负责管理Bean与Bean之间的依赖关系。

调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。

BeanFactory有一个常见的实现类:org.springframework.beans.factory.xml.XmlBeanFactory类。

ApplicationContext是BeanFactory的子接口,对于大部分JavaEE应用而言,使用它作为Spring容器更方便。其常见实现类是:FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotataionConfigApplicationContext。如果在web应用中使用Spring容器,通常有XmlWebApplicationContext、AnnotatioinConfigWebApplicationContext两个实现类。

大部分的JavaEE应用,可以在启动WEB应用时自动加载ApplicationContext实例,接受Spring管理的Bean无须知道ApplicationContext的存在,一样可以利用ApplicationContext的管理。对于独立的应用程序,也可通过如下方法来实例化BeanFactory。

1、

//搜索当前文件路径下的beans.xml文件创建Resource对象

InputStreamResource isr = new FileSystemResource(“beans.xml”);

//以Resource对象作为参数,创建BeanFactory对象

XmlBeanFactory factory = new XmlBeanFactory(isr);

或者采用:

2、

//搜索类加载路径,以类加载路径下的beans.xml文件创建Resource对象

ClassPathResource res = new ClassPathResource(“beans.xml”);

//以Resource对象作为参数,创建BeanFactory对象

XmlBeanFactory factory = new XmlBeanFactory(res);

如果需要同时加载多个XML配置文件,则可以采用如下方式:

//搜索CLASSPATH路径,以CLASSPATH路径下的applicationContext.xml、Bean.xml、Service.xml文件创建ApplicationContext

ApplicationContext appContext = new ClassPathXmlApplicaation(new String[“beans.xml”,”service.xml”]);

ApplicationContext:

ApplicationContext是BeanFactory接口的子接口,它增强了BeanFactory的功能。

ApplicationContext允许以声明式方式操作容器,无须手动创建它。可利用如ContextLoader的支持类,在WEB应用启动时自动创建ApplicationContext。当前,也可以采用编程方式创建ApplicationContext.

BeanFactory与ApplicationContext实例化容器中Bean的时机不同,前者等到程序需要Bean实例时才创建,而后者在容器创建ApplicationContext实例时,会预初始化容器中的全部Bean。

因为采用ApplicationContext作为Spring容器,创建容器时会同时创建容器中所有singleton作用域Bean,因此可能需要更多的系统开销。但一旦创建成功,应用后面的响应速度就会更快,因此,对于普通的JavaEE应用,推荐使用ApplicationContext作为Spring容器。

实际上Spring允许singleton作用的Bean指定lazy-init=”true”,该属性将改变singleton Bean实例的默认行为,强制取消该Bean实例预初始化,则该Bean将不会随着ApplicationContext启动而预实例化。

时间: 2024-08-04 11:51:06

Spring 容器的相关文章

8 -- 深入使用Spring -- 7...1 启动Spring 容器

8.7.1 启动Spring容器 对于使用Spring的Web应用,无须手动创建Spring容器,而是通过配置文件声明式地创建Spring容器.因此,在Web应用中创建Spring容器有如下两种方式: ⊙ 直接在web.xml文件中配置创建Spring容器 ⊙ 利用第三方MVC框架的扩展点,创建Spring容器.

监听器如何获取Spring配置文件(加载生成Spring容器)

Spring容器是生成Bean的工厂,我们在做项目的时候,会用到监听器去获取spring的配置文件,然后从中拿出我们需要的bean出来,比如做网站首页,假设商品的后台业务逻辑都做好了,我们需要创建一个监听器,在项目启动时将首页的数据查询出来放到application里,即在监听器里调用后台商品业务逻辑的方法,也就是说我们需要在监听器里获取Spring中配置的相应的bean.先把监听器创建出来: 1. 创建InitDataListener 创建一个监听器InitDataListener继承Serv

spring容器中bean的初始化

当我们在spring容器中添加一个bean时,如果没有指明它的scope属性,则默认是singleton,也就是单例的. 例如先声明一个bean: public class People { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String get

Spring学习2—Spring容器

一.Spring容器接口关系 容器是Spring框架的核心,Spring容器就是一个巨大的工厂.Spring容器使用Ioc(控制反转(Inversion of Control )管理所有组成应用系统的组件. Spring容器会使用XML解析器读取改属性值,并利用反射来创建该实现类的实例. Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口.它们都可以代表Spring容器.Spring容

Spring容器中Bean的生命周期

日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此,闲言少叙,书归正传,上图先: 步骤很多,切莫惊慌,我们可以把上面的步骤归纳如下: 1-2:创建实例: 现在假设spring就是个容器,而配置文件中配置的bean属性才是我们真正需要的东西.创建实例就是说,我把配置文件中的bean信息取出来化作一个真正的bean并放到容器中. 3-4:注入依赖关系:

Spring 容器里的bean初始化回调方法研究(一)

@Author xiejun @Since 2015/10/24 感慨一下,曾经某内的讲师说spring bean的创建讲三天三夜也说不完,这种空话听的耳朵 起茧了,却还是不停地被人repeat,究其原因,o(︶︿︶)o 唉确实有的研究. **** 米字符号中是业务剥离 业务介绍: 系统a需要从另一个系统b批量获取到单号,然后存入数据库,当到使用时,a系统将单号与绑定信息回传给b系统. 在这个业务中可以把获取和存入数据库做成一个单独的服务,在后台线程中自动运行.介绍一下实现: 在容器初始化级别的

Spring容器装饰者模式应用之实现业务类与服务类自由组合的解决方案

在任何一个项目中都不可或缺的存在两种bean,一种是实现系统核心功能的bean,我们称之为业务类,另外一种是与系统核心业务无关但同时又提供十分重要服务bean,我们称之为服务类.业务类的bean根据每个系统自身核心功能的不同可以有任意多个,但是服务类的种类在各个系统之间的差异却并不是很大.在系统中经常用到的服务有以下几种,权限服务,日志服务,缓存服务,事务服务以及预警服务等.在整个系统的不断进化过程中,服务类与业务类的关系也不断的发生着变化,由当初垂直模式变为横切模式,这也是编程思想不断演化过程

spring容器启动原理分析1

在项目的web.xml中配置 1 <listener> 2 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 3 </listener> 此配置为spring容器加载入口,因为其javax.servlet.ServletContextListener接口. 下面代码为ServletContextListener的源码: public i

Spring框架笔记(四)——Spring容器的属性配置详解的六个专题

在spring IOC容器的配置文件applicationContext.xml里,有一些配置细节值得一提.我们将一些问题归结为以下几个专题. 专题一:字面值问题 配置的bean节点中的值,我们提出一个概念--字面值. 字面值:可用字符串表示的值. 字面值可以通过 <value> 元素标签或 value 属性进行注入. 基本数据类型及其封装类.String 等类型都可以采取字面值注入的方式 若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起来. 例如:(本文