如果说BeanFactory是Spring的心脏,那么Application就是完整的身躯。ApplicationContext就是由BeanFactory派生出来的。

1、ApplicationContext

ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统加载文件。

如果配置文件放在类路径下,直接使用ClassPathXmlApplicationContext实现类:

ApplicationContext ctx=new ClassPathXmlApplicationContext("com/techman/context/beans.xml");

这里的参数等同于:"classpath:com/techman/context/beans.xml"

如果配置文件在文件系统的路径下,则可以优先考虑使用FileSystemXmlApplicationContext实现类:

ApplicationContext ctx=new FileSystemXmlApplicationContext("com/techman/context/beans.xml");

这里的参数等同于:"file:com/techman/context/beans.xml".

还可以指定一组配置文件,Spring自动将多个配置文件在内存中整合成一个配置文件:

ApplicationContext ctx=new ClassPathXmlApplicationContext(new String[]{"conf/bean1.xml","conf/bean2.xml"});

2、AnnotationConfigApplicationContext

直接实例:

  1. [java] view plaincopyprint?
  2. package com.techman.context;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import com.techman.reflect.Car;
  6. @Configuration //表示是一个配置信息提供类,这里是通过类注解的配置方式
  7. public class Beans
  8. {
  9. @Bean(name="car")
  10. public Car buildCar()
  11. {
  12. Car car=new Car();
  13. car.setBrand("红旗CA72");
  14. car.setMaxSpeed(340);
  15. return car;
  16. }
  17. }

复制代码

  1. [java] view plaincopyprint?
  2. package com.techman.context;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  5. import com.techman.reflect.Car;
  6. //这里需要spring-context.jar和spring-expression.jar的支持
  7. public class AnnotationApplicationContext
  8. {
  9. public static void main(String []args)
  10. {
  11. //通过一个带@Configuration的POJO装载Bean配置
  12. ApplicationContext ac=new AnnotationConfigApplicationContext(Beans.class);
  13. Car car=ac.getBean("car",Car.class);
  14. car.introduce();
  15. }
  16. }

复制代码

AnnotationConfigApplicationContext将加载Beans.class中的Bean定义并调用Beans.class中实现的方法实例化Bean,启动容器并装配Bean.
3、WebApplicationContext

WebApplicationContext是专门为Web应用准备的,它允许从相对于web根目录的路径中加载配置文件完成初始化工作。

WebApplicationContext扩展了ApplicationContext,WebApplicationContext定义了一个常量ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,在上下文启动时,我们可以直接通过下面的语句从web容器中获取WebApplicationContext:

WebApplicationContext

wac=(WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

4、ConfigurableWebApplicationContext

ConfigurableWebApplicationContext扩展了WebApplicationContext,它允许通过配置的方式实例化WebApplicationContext,它定义了两个重要的方法:

setServletContext(ServletContext servletContext):为Spring设置Web应用上下文,以便两者整合。

setConfigLocation(String[]

configLocations)设置Spring配置文件地址,一般情况下,配置文件地址是相对于Web根目录的地址,如/WEB-INF/techman-dao.xml等。也可以使用classpath:com/techman/context/techman-dao.xml等格式。

5、Spring为使用WebApplicationContext的Servlet和Web容器监听器:

org.springframework.web.context.ContextLoaderServlet;

org.springframework.web.context.ContextLoaderListener;

这里是web.xml启动WebApplicationContext的配置:

  1. [html] view plaincopyprint?
  2. <!-- 从类路径下加载Spring配置文件,classpath关键字特指类路径下加载 ,如果多个文件则使用逗号或空格隔开-->
  3. <context-param>
  4. <param-name>contextConfigLocation</param-name>
  5. <param-value>classpath:applicationContext.xml,/WEB-INF/techman-dao.xml</param-value>
  6. </context-param>
  7. <!-- 负责启动Spring容器的监听器,它将引用上面的上下文参数获得Spring配置文件地址 -->
  8. <listener>
  9. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  10. </listener>

复制代码

如果在不支持容器监听器的低版本Web容器中,我们可采用ContextLoaderServlet完成相同的工作:

  1. [html] view plaincopyprint?
  2. <!-- 从类路径下加载Spring配置文件,classpath关键字特指类路径下加载 ,如果多个文件则使用逗号或空格隔开-->
  3. <context-param>
  4. <param-name>contextConfigLocation</param-name>
  5. <param-value>classpath:applicationContext.xml,/WEB-INF/techman-dao.xml</param-value>
  6. </context-param>

复制代码

  1. [html] view plaincopyprint?
  2. <servlet>
  3. <servlet-name>springContextLoaderServlet</servlet-name>
  4. <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
  5. <load-on-startup>1</load-on-startup>
  6. </servlet>

复制代码

6、Log4j的配置

由于WebApplicationContext需要使用日志功能,用户可以将log4j.properties放置在类路径下,这样就会自动启动。如果放在其他地方,必须在web.xml中指定Log4j配置文件的位置。Spring为启动Log4j引擎提供了两个类og4jConfigServlet和Log4jConfigListener,不管哪种方式都必须保证能够在装载Spring配置文件前先装载Log4J配置信息。

  1. [html] view plaincopyprint?
  2. <context-param>
  3. <param-name>log4jConfigLocation</param-name>
  4. <param-value>/WEB-INF/log4j.properties</param-value>
  5. </context-param>
  6. <servlet>
  7. <servlet-name>log4jConfigServlet</servlet-name>
  8. <servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
  9. <load-on-startup>1</load-on-startup>
  10. </servlet>

复制代码

7、使用标注@Configuration的Java类提供配置信息

方式如下:

  1. [html] view plaincopyprint?
  2. <!-- 通过指定context参数,让Spring使用AnnotationConfigWebApplicationContext而非XmlWebApplicationContext启动容器 -->
  3. <context-param>
  4. <param-name>contextClass</param-name>
  5. <param-value>
  6. org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  7. </param-value>
  8. </context-param>
  9. <!-- 指定标注了@Configuration的配置类,多个可以使用逗号或空格分隔 -->
  10. <context-param>
  11. <param-name>contextConfigLocation</param-name>
  12. <param-value>com.smart.Beans,com.smart.AppConfig2</param-value>
  13. </context-param>
  14. <!--
    ContextLoaderListener监听器将根据上面的配置使用AnnotationConfigWebApplicationContext根據contextConfigLocation指定的配置類啟動Spring容器
    -->
  15. <listener>
  16. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  17. </listener>

复制代码

http://bbs.codeweb.cn/thread-5887-1-1.html

ApplicationContext的名称解释的更多相关文章

  1. 【名称解释】#001 IIS名词解释

    关于[名称解释]类型的文章,会慢慢更新. 2015.02.06 更 应用程序池: 应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置. 因为应用程序池中的应用程序与其他应用程序被工作进 ...

  2. k8s部分名称解释

    k8s部分名词解释 NameSpace:命名空间 Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组.常见的pods, services, repl ...

  3. JAVA 基础知识学习笔记 名称解释

    Java ee:​ IDE: ​ itegrity   development environment 集成开发环境 JMS:​ java Message Service java   信息服务 JM ...

  4. Linux的各个文件夹名称解释(FHS)

    对于接触和已经接触过一段时间Linux的使用者来说,系统的各个文件夹名字还是挺让人费解的,什么etc,usr,var等等,大部分也是耳濡目染才有一个大概的概念,例如usr是存放自己编译安装的软件,et ...

  5. COM组件技术名称解释

    GUID:全局唯一标识. CLSID 或 ProgID :唯一地表示一个组件服务程序,那么根据这些ID,就可以加载运行组件,并为客户端程序提供服务了. IID :唯一的表示接口ID. COM 组件是运 ...

  6. 74LS 系列 名称解释

    摘自:http://blog.sina.com.cn/s/blog_502ffce50100j9db.html -------------------------------------------- ...

  7. mysql EXPLAIN Join Types 手册解释 及数据实操

     第一部分:名称解释 文档地址 https://dev.mysql.com/doc/refman/5.7/en/explain-output.html EXPLAIN Join Types: The ...

  8. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  9. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

随机推荐

  1. vue+element 表格筛选

      筛选是element 组件 自己有的东西,按照文档撸 是没有问题 这里存在一个情况是,如果 筛选 的数据没有 那么整个表格为空白,产品要加提示 例如:暂无筛选的数据 解决方案:通过 ref 获取整 ...

  2. cocos:C++ 导出到lua, genbindings.py修改

    cocos:C++ 导出到lua, genbindings.py修改 1. 准备 把tools目录下的cocos2dx_extension.ini, genbindings.py, userconf. ...

  3. TCP、UDP和HTTP区别详解

    http:是用于www浏览的一个协议.tcp:是机器之间建立连接用的到的一个协议. 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.在网络层有IP协议.ICMP协议.ARP协议.R ...

  4. 透彻的掌握 Spring 中@transactional 的使用

    事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编码式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...

  5. HDFS命令行及JAVA API操作

    查看进程 jps 访问hdfs: hadoop-root:50070 hdfs bash命令: hdfs dfs <1>   -help:  显示命令的帮助的信息 <2>  - ...

  6. Android工具使用之UiAutomatorViewer

    学习博客: https://blog.csdn.net/l403040463/article/details/79235670    使用, 添加web 网页的监控.

  7. k8s-Label(标签)

    k8s-Label(标签) 一.Label是什么? Label是Kubernetes系统中的一个核心概念.Label以key/value键值对的形式附加到各种对象上,如Pod.Service.RC.N ...

  8. - Gradle 翻译 Analyzer APK文件分析 MD

    目录 目录 APK文件分析 使用 APK 分析器分析您的编译版本 查看文件和大小信息 查看 AndroidManifest.xml 查看 DEX 文件 过滤DEX文件树视图 加载 Proguard 映 ...

  9. 给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O(1)

    先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和. 在数组A中,我们定义两个数据集合a1,a2.a1为出现次数大于n/2的数的集合,a2为其余数组成的 ...

  10. java异常的基本概念和处理流程

    一.异常的基本概念 在java中把导致程序中断运行的情况分为两种,一种就是异常,而另外一种叫做错误.所有异常的基类是Exception,错误的基类是Error.Exception是在java程序中可以 ...