Spring容器

来源:互联网 发布:沙发网购推荐 知乎 编辑:程序博客网 时间:2024/05/21 18:32

一、定义

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

注:Spring里的Bean是广泛的概念,任何的Java对象、Java组件都会被当成Bean处理。
创建Spring容器时,需要提供管理Bean的xml配置文件

二、类型

Spring容器有两个,由如下两个接口实现:

BeanFactory(很少用

ApplicationContext(可加载多个配置文件

BeanFactory和ApplicationContext接口都代表Spring容器,且ApplicationContext是BeanFactory的子接口

三、使用BeanFactory实现的Spring容器

BeanFactory用得少,除非对于某些内存非常关键的应用才考虑使用

1. BeanFactory接口的基本方法

 boolean containsBean(String name):判断Spring容器中是否包含id为name的Bean实例 T getBean(`Class<T>` type):获取容器中唯一的、类型为type的Bean实例 Object getBean(String name):返回容器id为name的Bean实例 T getBean(String name,Class<T> type):返回容器id为name,类型为type的Bean实例 Class<?> getType(String name):返回容器id为name的Bean实例的类型

2. BeanFactroy常用实现类

DefaultListableBeanFactory

3. 实例化BeanFactory

//搜索类加载路径下的beanxml文创创建Resource对象Resource source = new ClassPathResource("bean.xml");/* 如果是搜索文件系统xml配置文件可用如下代码获取Resource对象Resource source = new FileSystemResource("bean.xml");*///创建默认的BeanFactory容器DefaultListableBeanFactory factory = new DefaultListableBeanFactory();//让默认的BeanFactory容器加载source对应的xml配置文件new XmlBeanDefinitionReader(factory).loadBeanDefinitions(source);

四、使用ApplicationContext

实现Spring容器

1. ApplicationContext是BeanFactory的子接口,所以除了BeanFactory的全部功能外,还有以下功能

ApplicationContext默认预初始化所有Bean,可通过在<bean.../>上配置lazy-init=”true”取消。

因继承了MessageSource接口,所以提供国际化支持

支持资源访问,如URL和文件

事件机制

可同时加载多个配置文件

能以声明方式启动并创建Spring容器

2. ApplicationContext实现类

常用实现类有:

 FileSystemXmlApplicationContext  ClassPathXmlApplicationContext  AnnotationConfigApplicationContext 

如果是在Web应用中,常用实现类是:

 XmlWebApplicationContext AnnotationConfigWebApplicationContext

3. 实例化ApplicationContext

大部分JavaEE应用在启动Web应用时自动加载ApplicationContext实例,但对于独立的 程序,需要手动实例化

ApplicationContext app= new ClassPathXmlApplicationContext("bean.xml"); 

只需要这一句代码就够了,因为在创建app时就初始化了所有Bean。上面是利用编程方式创建ApplicationContext实例,下面是以声明方式创建ApplicationContext实例的方式,此时需要在web.xml中配置如下代码:

bean.xml放在/WEB-INF下时,只需要在web.xml中声明一个listener:

<listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

ContextLoaderListener实现了ServletContextListener接口,在Servlet监听器里ServletContextListener监听的是ServletContext,即Web应用的启动与关闭

如果bean.xml放在src目录下,即classpath下

<!-- Spring 容器 --><context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:bean.xml</param-value></context-param><!-- 初始化并监听 Spring 容器 --><listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

如果有多个配置文件时,classpath:后面跟通匹符 *

0 0
原创粉丝点击