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配置文件
如果应用中有多个属性配置文件,则应该采用BeanFactory的子接口ApplicationContext来创建BeanFactory的实例。ApplicationContext通常使用如下实现类:
FileSystemXmlApplicationContext 以基于文件系统的XML配置文件创建ApplicationContext实例。
ClasspathXmlApplicationContext 以类加载路径下的XML配置文件创建ApplicationContext实例。
如果有需要也可以将ApplicationContext实例赋给BeanFactory变量。
Spring配置文件的根元素是<beans.../>,该元素可以接受0到多个<bean.../>子元素,每个<bean.../>子元素配置一个Bean实例。
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配置文件如下
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/>
相关文章推荐
- Java多线程实现异步调用
- 对比: Java EE EJB和 Spring Java Bean
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- 160309、Spring AOP操作action时无法注入,报空指针错误
- JAVA基础(三)抽象类和抽象函数
- Java 进阶 之 抽象类与接口 概念(一)
- Java学习总结--多线程
- LeetCode : Substring with Concatenation of All Words [java]
- Spring JdbcTemplate API
- JAVA-冒泡排序,归并排序,快速排序,堆排序学习
- Java中synchronized如何正确同步
- Java学习总结--初始化块
- Java robot类的getPixelColor问题
- 15. SpringMVC 执行定时任务,处理静态资源,配置视图解析器
- 理解Java对象序列化
- eclipse拿到手需要干的那些事
- 14. Spring国际化与图片验证码
- 【转载】人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[3]——邯郸学步
- Eclipse中定位至某一行的快捷键
- 13. SpringMVC 文件上传与下载