• Spring Bean的装配模式-BeanFactory和ApplicationContext


    作为Spring核心机制的依赖注入/控制反转,改变了传统编程习惯。

    组件的实例化不再由应用程序完成,转而交给Spring容器完成,需要时注入到应用程序中,从而将组件之间的依赖关系进行解耦

    这一切都离不开Spring配置文件中使用<bean>元素。

    Spring框架的主要功能是通过其IoC容器来实现的,它可以容纳我们所开发的各种Bean,并且我们可以从中获取各种发布在Spring IoC容器里的Bean,并且通过描述得到它。

    Spring IOC容器的设计主要基于BeanFactory和ApplicationContext两个接口。

    Bean工厂 BeanFactory

    Spring IOC设计的核心是Bean容器BeanFactory是Spring IOC容器的核心接口,采用了Java 经典的工厂模式,由org.springframework.beans.factory.BeanFactory接口定义。

    作为制造Bean的工厂,BeanFactory接口负责向容器的使用者提供实例,其功能主要是负责初始化各种Bean,并根据预定的配置完成对象之间依赖关系的组装,最终向使用者提供已经完成装配的可用对象。

    BeanFactory接口提供了几个实现类,其中最常用的是org.springframework.beans.factory.xml.XmlBeanFactory,会跟XML配置文件中的定义来装配Bean,加载配置信息的语法如下:

    BeanFactory beanFactory=new XmlBeanFactory(new FileSystemResource("D:/beans.xml"))  //这种加载方式在实际开发中并不多见,了解即可。

    Bean工厂ApplicationContext

    ApplicationContext是BeanFactory的子接口之一,换句话说,BeanFactory是Spring容器所定义的最底层接口,而ApplicationContext是其高级接口之一

    ApplicationContext并且对BeanFactory功能做了许多有用的扩展,还添加了对国际化、资源访问、实践传播等方面的支持。

    ApplicationContext成为Java EE应用中首选的IoC容器,可应用在Java APP 和 Java Web中。

    ApplicationContext的中文含义是“应用上下文”,它继承自BeanFactory接口,有三个常用的实现类。

    ClassPathXMLApplicationContext

    ClassPathXMLApplicationContext类从类路径ClassPath中寻找指定的XML配置文件,找到并装载ApplicationContext的实例化工作。例如:

    ApplicationContext context=new ClassPathXMLApplicationContext(String configLocation);

    configLocation 参数指定Spring配置文件的名称和位置,如“ApplicationContext.xml”。 

    ClassPathXmlApplicationContext 默认会去 classPath 路径下找。classPath 路径指的就是编译后的 classes 目录。

     FileSystemXmlApplicationContext

    FileSystemXMLApplicationContext类从指定的文件系统路径中寻找指定的XML配置文件,找到并转载ApplicationContext的实例化工作。例如:

    ApplicationContext context=new FileSystemXMLApplicationContext(String configLocation);

    其与ClassPathXMLApplicationContext的区别在于读取Spring配置文件的方式,FileSystemXMLApplicationContext不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,可以获取类路径以外的资源。这样绝对路径的方式,会导致程序的灵活性变差,所以这个方法一般不推荐使用。

    FileSystemXmlApplicationContext 默认是去项目的路径下加载,可以是相对路径,也可以是绝对路径,若是绝对路径,“file:” 前缀可以缺省。

    XMLWebApplicationContext

    XMLWebApplicationContext类从Web系统中的XML文件载入Bean定义的信息,Web应用寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。例如:

    ServletContext servletcontext=request.getSession().getServletContext();

    ApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(servletContext);

    在使用Spring框架时,可以通过实例化其中的任何一个类来创建Spring的ApplicationContext容器,这些实现类的主要区别在于装载Spring配置文件实例化ApplicaitonContext容器的方式不同,在实例化ApplicationContext之后,同样通过getBean的方法从ApplicationContext容器中获取装配好的Bean实例以供使用。

     

     在Java项目中通过ClassPathXmlApplicationContext类手工实例化ApplicationContext容器通常是不二之选。

    但对于Web项目就不行了。Web项目的启动是由响应的Web服务器负责的,因此在Web项目中,AppllicationContext容器的实例化工作最好交给Web服务器来完成,Spring为此提供了如下两种方式:

    (一)基于ContextLoaderListener实现

    这种方式只适用于Servlet2.4及以上规范的Servlet,需要在web.xml中添加如下代码:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicatoinContext.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>
             org.springfaramwork.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    (二)基于ContextLoaderServlet实现

    <!--指定spring配置温的位置,多个配置文件以逗号分隔-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicatoinContext.xml</param-value>
    </context-param>
    <!--指定以Servlet方式启动Spring容器-->
    <Servlet>
        <servlet-name>context</servlet>
        <servlet-class>
             org.springfaramwork.web.context.ContextLoaderServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </Servlet>

     

  • 相关阅读:
    SQLServer DBA 三十问
    sql server中的日期详解使用(convert)
    【转】对于表列数据类型选择的一点思考
    OLTP与OLAP
    Linux文件目录介绍及文件颜色区别
    [转贴]提问的智慧
    sql server作业管理查看/进程管理查看命令
    T-SQL中的十大注意事项
    正则表达式30分钟入门教程
    SQL中on条件与where条件的区别
  • 原文地址:https://www.cnblogs.com/kjitboy/p/12067934.html
Copyright © 2020-2023  润新知