zoukankan      html  css  js  c++  java
  • Spring在Web应用中的事件与使用

    ApplicationContext在WEB应用中的实例化

    ApplicationContext能以声明的方式创建,如使用ContextLoader。当然你也可以使用以编程的方式创建ApplicationContext实例。首先,让我们先分析ContextLoader接口及其实现。ContextLoader机制有两种方式,ContextLoaderListener 和ContextLoaderServlet,他们功能相同但是listener不能在Servlet2.3容器下使用。Servlet2.4规范中servlet context listeners需要在web应用启动并能处理初始请求时立即运行。(servlet context listener关闭的时候也是相同的)。servlet context listener是初始化Spring ApplicationContext理想的方式。
    可以象下面所示例的一样使用ContextLoaderListener注册一个ApplicationContext

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>
    </context-param>
    
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- or use the ContextLoaderServlet instead of the above listener
    <servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    -->


    监听器首先检查contextConfigLocation参数,如果它不存在,它将使用/WEB-INF/applicationContext.xml作为默认值。如果已存在,它将使用分隔符(逗号、冒号或空格)将字符串分解成应用上下文件位置路径。可以支持ant-风格的路径模式,如/WEB-INF/*Context.xml(WEB-INF文件夹下所有以"Context.xml"结尾的文件)。或者/WEB-INF/**/*Context.xml(WEB-INF文件夹及子文件夹下的以"Context.xml"结尾的文件)。

    ContextLoaderServlet同ContextLoaderListener一样使用'contextConfigLocation'参数。

    ApplicationContext在Web应用中的获得

    import org.springframework.web.context.support.WebApplicationContextUtils;
    ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(context);

    ApplicationContext事件

    事件的处理通过ApplicationEvent类和ApplicationListener接口来提供的。如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当一个ApplicationEvent发布到ApplicationContext时,这个bean就得到通知。实质上,这是标准的Observer设计模式。

    事件类型如下

    使用举例:

    //applicationContext.xml中部署listener bean
    <bean id="workloadListener" class="WorkloadListener">
    </bean>
    public class WorkloadListener implements ApplicationListener{
    	public void onApplicationEvent(ApplicationEvent event) {
        	if(event instanceof ContextRefreshedEvent)
        		...;
        	if(event instanceof ContextClosedEvent)
        		...;
    	}
    }
    
    
  • 相关阅读:
    【Spring注解驱动开发】二狗子让我给他讲讲@EnableAspectJAutoProxy注解
    【Spring注解驱动开发】你敢信?面试官竟然让我现场搭建一个AOP测试环境!
    【Nginx】如何基于主从模式搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!
    华为分析+App Linking:一站式解决拉新、留存、促活难
    deeplink跳转快应用返回出现两次系统添加桌面的弹框
    4月26日19:30,#HMS Core Insights#直播系列第二期来了!
    HMS Toolkit自动化环境配置,助您高效集成HMS Core
    全体注意!一大波鸿蒙三方库即将到来
    HMS Toolkit助力开发者高效集成HMS Core
    教你使用一套代码解决出海问题
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982059.html
Copyright © 2011-2022 走看看