您的位置:首页 > 编程语言 > Java开发

Spring 的容器

2016-03-09 21:21 344 查看
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/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: