Spring 的容器

本文介绍了Spring框架中的核心概念——BeanFactory和ApplicationContext,探讨了它们的功能及如何通过配置文件管理和创建Bean实例。同时,文章还提供了创建Spring容器的示例代码。

Spring有两个核心的接口:BeanFactory和ApplicationContext,其中ApplicationContex(Spring上下文)t是BeanFactory的子接口。BeanFactory是spring容器的最基本的接口。

Spring容器是生成Bean实例的工厂,并管理器中的Bean。

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

Bean在Spring容器中运行,无须感受Spring容器的存在,一样可以接受Spring的依赖注入,包括Bean属性的注入、协作者的注入、依赖关系的注入等。

Spring容器必须能精确知道每个Bean 的实现类,因此Spring配置文件必须精确配置Bean实例的实现类。

BeanFactory负责配置、创建、管理Bean,还负责管理Bean与Bean之间的依赖关系。


1. boolean containsBean(String name):判断Spring容器是否包含id为name的Bean实例

2. <T> T getBeam(Class<T> requiredType):获取Spring容器中属于requiredType类型的、唯一的Bean实例。

3. Object getBean(String name):返回容器id为name的Bean实例

4. <T> T getBean(String name,class requiredType):返回容器中id为name,并且类型为requiredType的Bean

5. Class<?>getType(String name):返回容器中指定Bean实例的类型


BeanFactory有一个常用的实现类org.springframework.beans.factory.xml.XMLBeanFactory类

ApplicationContext是BeanFactory的子接口

常用的实现类FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和

AnnotationconfigApplicationContext

web应用中使用Spring容器通常有XmlWebApplicationContext、AnnotationConfigWebApplicationContext

创建Spring容器时需通过resource接口传入xml配置文件



//搜索当前路径下的beans.xml文件创建Resource对象
InputStreamResource isr = new FileSystemResource("bean.xml");
//以Resource对象作为参数,创建BeanFactory实例
XmlBeanFactory factory = new XmlBeanFactory(isr);

或者
//搜索类加载路径,以类加载路径下的beans.xml文件创建Resource对象
ClassPathResource res = new ClassPathResource("beans.xml");
//以Resource对象为参数,创建BeanFactory实例
XmlBeanFactory factory = new XmlBeanFactory(res);

如果应用中有多个属性配置文件,则应该采用BeanFactory的子接口ApplicationContext来创建BeanFactory的实例。ApplicationContext通常使用如下实现类:

FileSystemXmlApplicationContext    以基于文件系统的XML配置文件创建ApplicationContext实例。

ClasspathXmlApplicationContext  以类加载路径下的XML配置文件创建ApplicationContext实例。

//搜索CLASSPATH路径,以CLASSPATH路径下的applicationContext.xml
//bean.xml  service.xml文件创建ApplicationContext
ApplicationContext appContext = new ClassPathXmlApplicationContext(new String[]{"bean.xml","service.xml"});

//以指定路径下的bean.xml  service.xml文件创建ApplicationContext
ApplicationContext appContext = new FileSystemXmlApplicationContext(new String[]{"bean.xml","service.xml"});

如果有需要也可以将ApplicationContext实例赋给BeanFactory变量。


Spring配置文件的根元素是<beans.../>,该元素可以接受0到多个<bean.../>子元素,每个<bean.../>子元素配置一个Bean实例。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<pre name="code" class="html"><?xml version="1.0" encoding="GBK"?>
<!--指定Spring配置文件的DTD信息-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
	"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<!-- Spring 配置文件的根元素 -->
<beans>
	...
<beans/> 

xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- 配置chinese实例,其实现类是Chinese --><bean id="chinese" class="tju.chc.app.service.impl.Chinese"><!-- 将stoneAxe注入给axe属性 --><property name="axe" ref="steelAxe"/></bean><!-- 配置stoneAxe实例,其实现类是StoneAxe --><bean id="stoneAxe" class="tju.chc.app.service.impl.StoneAxe"/><!-- 将PersonService类部署成Spring容器中的Bean --><bean id="personService" class="tju.chc.app.service.PersonService"><!-- 将wawa注入给name --><property name="name" value="wawa"/></bean><bean id="steelAxe" class="tju.chc.app.service.impl.SteelAxe"/></beans>


上述配置文件采用了XML Schema来定义配置文件的定义约束,实际上也可以采用DTD来定义配置文件的语义约束。但如果DTD来定义XML的语义约束,则不能使用Spring2.X、Spring3.X所增的配置标签。使用DTD作为语义约束的Spring配置文件如下

<?xml version="1.0" encoding="GBK"?>
<!--指定Spring配置文件的DTD信息-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
	"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<!-- Spring 配置文件的根元素 -->
<beans>
	...
<beans/> 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值