欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring之Bean容器初始化以及bean实例的获取

程序员文章站 2022-05-21 22:18:03
...

依赖注入:程序当中的一个对象依赖IOC容器将另外一个对象注入到本对象中,也就是创建各组件之间的关系

IOC容器主要用到两个包(以Spring3.2为例):

1)spring-beans-3.2.0.RELEASE.jar:主要是BeanFactory及其子类(详细内容参考;http://www.cnblogs.com/davidwang456/p/4213652.html)

2)spring-context-3.2.0.RELEASE.jar:主要是ApplicationContext及其实现类


获取Spring IOC容器代理的Bean实例的几种方式:


一、Spring中获取IOC 容器代理的Bean的实例主要依靠Bean工厂:ApplicationContext

对于ApplicationContext的解释大多如下:

ApplicationContext的中文意思是“应用上下文”,它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,被推荐为Java EE应用之首选,可应用在Java APP与Java Web中。

二、开发中经常的使用的ApplicationContext的实现类如下:

类 名 
功 能 描 述
ClassPathXmlApplicationContext
从类路径ClassPath中寻找指定的XML配置文件,找到并装载
完成ApplicationContext的实例化工作。例如:
//装载单个配置文件实例化ApplicationContext容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//装载多个配置文件并实例化ApplicationContext容器
String[] configs = {"applicationContext1.xml","applicationContext2.xml","applicationContext3.xml"};
ApplicationContext context = new ClassPathXmlApplicationContext(configs);
在Java项目中通过ClassPathXmlApplicationContext类手动实例化ApplicationContext容器通常是不二之选
FileSystemXmlApplicationContext
从指定的文件系统路径中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。如:
//装载单个配置文件实例化ApplicationContext容器
ApplicationContext context = new FileSystemXMLApplicationContext("applicationContext.xml");
//装载多个配置文件实例化ApplicationContext容器
String[] configs = {"c:/applicationContext1.xml","c:/applicationContext2.xml"};
ApplicationContext context = new FileSystemXmlApplicationContext(configs);
说明:这种方式多用于将使用Spring框架的独立的应用程序中,因为此时需要手动的指定Spring的配置文件并初始化。

XmlWebApplicationContext
从Web应用中的寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。这是为Web工程量身定制的,使用WebApplicationContextUtils类的getRequiredWebApplicationContext(ServletContext servletContext)方法或getWebApplicationContext(ServletContext  servletContext)方法,可在JSP与Servlet中根据ServletContext取得IoC容器的引用,例如:
import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);//参数为ServletContext类型。
常用于B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例
而在Web项目的普通类中可以继承或实现相应的类或接口(如继承抽象类ApplicationObjectSupport、继承抽象类WebApplicationObjectSupport、实现接口ApplicationContextAware)来获取spring ApplicationContext对象:

但是在使用时一定要注意实现了这些类或接口的普通java类一定要在Spring 的配置文件application-context.xml文件中进行配置即将这些类注册到ApplicationContext(IOC容器)中。否则获取的ApplicationContext对象将为null

以上三种方式实例化ApplicationContext后都可以使用getBean()方法从ApplicationContext(IOC容器)中获得容器中的额bean实例并使用。

三、Web项目中的相关应用

我们知道对于Web项目来说ApplicationContext中包含的Bean的实例化最好能够交给Web服务器来完成。主要有涉及到两方面:

1)Spring配置文件如何加载?

2)Web服务器如何实例化ApplicationContext容器中的Bean?

对于问题1:我们可以在Spring的XML的配置文件中添加如下代码:


<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/appContext.xml</param-value> 
</context-param>

通过以上配置变可以实现在服务器启动时实例化指定的额applicationContext.xml配置文件了!

注:Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的“图纸”。Java EE程序员必须学会并灵活应用这份“图纸”准确地表达自己的“生产意图”。Spring配置文件是一个或多个标准的XML文档,

ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。

对于问题2:Spring提供了两种方式在使得在Web项目启动时能够由Web服务器实例化ApplicationContext容器,无论哪种方式均可以在服务器启动时实例化Bean的目的

方式一:(较常用的方式)在applicationContext.xml配置文件中添加监听器ContextLoaderListener 

<listener>  
    <listener-class> org.springframework.web.context.ContextLoaderListener   </listener-class>
 </listener>
方式二:在applicationContext.xml配置文件中添加ContextLoaderServlet:

<servlet> 
    <servlet-name>context</servlet-name> 
    <servlet-class> 
       org.springframework.web.context.ContextLoaderServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet>

从servlet容器启动时加载组件的顺序来看,Listener组件是优先于Servlet组件的。基于Servlet方式的加载方案主要是为了兼容Servlet2.3及以下规范的Servlet容器。以Tomcat为例,Tomcat 5.x都已经支持Servlet2.4规范了,因此,基于Listener方式启动Spring容器是目前的主流选择

参考文章:1、http://baike.baidu.com/link?url=Z71Y-Uq8RHWDlSXVw9iyUBS2lIG3Hh14GdVkZ9waGGOhrl6r8CXSexs_PTN68mQM88A0CUJkQqFfzp6aFS0M8a#ref_[1]_9200243

2、http://blog.sina.com.cn/s/blog_9c7ba64d0101evar.html

3、http://blog.163.com/wangfei_sleading/blog/static/169050050201119101311349/

原文:http://m.blog.csdn.net/article/details?id=51144230

相关标签: spring bean