Spring
  • [Spring]Spring 教程
  • [Spring]Spring 体系结构
  • [Spring]Spring 环境配置
  • [Spring]Spring Hello World 实例
  • [Spring]Spring IoC 容器
  • [Spring]Spring BeanFactory 容器
  • [Spring]Spring ApplicationContext 容器
  • [Spring]Spring Bean 定义
  • [Spring]Spring Bean 作用域
  • [Spring]Spring Bean 生命周期
  • [Spring]Spring Bean 后置处理器
  • [Spring]Spring Bean 定义继承
  • [Spring]Spring 依赖注入
  • [Spring]Spring 基于构造函数的依赖注入
  • [Spring]Spring 基于设值函数的依赖注入
  • [Spring]Spring 注入内部 Beans
  • [Spring]Spring 注入集合
  • [Spring]Spring Beans 自动装配
  • [Spring]Spring 自动装配 ‘byName’
  • [Spring]Spring 自动装配 ‘byType’
  • [Spring]Spring 由构造函数自动装配
  • [Spring]Spring 基于注解的配置
  • [Spring]Spring @Required 注释
  • [Spring]Spring @Autowired 注释
  • [Spring]Spring @Qualifier 注释
  • [Spring]Spring JSR-250 注释
  • [Spring]Spring 基于 Java 的配置
  • [Spring]Spring 中的事件处理
  • [Spring]Spring 中的自定义事件
  • [Spring]Spring 框架的 AOP
  • [Spring]Spring 中基于 AOP 的 XML架构
  • [Spring]Spring 中基于 AOP 的 @AspectJ
  • [Spring]Spring JDBC 框架
  • [Spring]Spring JDBC 示例
  • [Spring]Spring 中 SQL 的存储过程
  • [Spring]Spring 事务管理
  • [Spring]Spring 编程式事务管理
  • [Spring]Spring 声明式事务管理
  • [Spring]Spring Web MVC 框架
  • [Spring]Spring MVC Hello World 例子
  • [Spring]Spring MVC 表单处理例子
  • [Spring]Spring 页面重定向例子
  • [Spring]Spring 静态页面例子
  • [Spring]Spring 异常处理例子
  • [Spring]Spring 使用 Log4J 记录日志
  • 直达腾讯云服务器
    腾讯云服务器,数据库,短信等热销产品限量秒杀;新购爆款3折起;
    腾讯云数据库MySQL入门机型仅12元/月
    腾讯云云服务器新购特惠,最低2折起,1核1G3年仅794.73元,即0.73元/日。
    腾讯云国际顶级CA机构SSL证书8.8折,云解析买一年最高送半年!
    腾讯云为数百万企业和开发者提供安全、稳定的云服务器、云数据库、CDN等云服务
    腾讯云服务器安全可靠高性能,多种配置供您选择
    腾讯云数据库性能卓越稳定可靠,为您解决数据库运维难题
    阿里云服务器入口
    180天免费用腾讯云服务器马上领取
    您当前位置:狗鱼MySQL教程 >> 服务端编程 >> Spring >> Spring 中的事件处理
    Spring 中的事件处理
    更新日期: 2017年08月04日 来源: 本站原创 作者: 佚名 阅读:
    上一篇Spring 基于 Java 的配置 下一篇:Spring 中的自定义事件

    Spring 中的事件处理

     

    Spring 中的事件处理

    你已经看到了在所有章节中 Spring 的核心是 ApplicationContext,它负责管理 beans 的完整生命周期。当加载 beans 时,ApplicationContext 发布某些类型的事件。例如,当上下文启动时,ContextStartedEvent 发布,当上下文停止时,ContextStoppedEvent 发布。

    通过 ApplicationEvent 类和 ApplicationListener 接口来提供在 ApplicationContext 中处理事件。如果一个 bean 实现 ApplicationListener,那么每次 ApplicationEvent 被发布到 ApplicationContext 上,那个 bean 会被通知。

    Spring 提供了以下的标准事件:

    序号 Spring 内置事件 & 描述
    1

    ContextRefreshedEvent

    ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext 接口中使用 refresh() 方法来发生。
     

    2

    ContextStartedEvent

    当使用 ConfigurableApplicationContext 接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。
     

    3

    ContextStoppedEvent

    当使用 ConfigurableApplicationContext 接口中的 stop() 方法停止 ApplicationContext 时,发布这个事件。你可以在接受到这个事件后做必要的清理的工作。
     

    4

    ContextClosedEvent

    当使用 ConfigurableApplicationContext 接口中的 close() 方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启。
     

    5

    RequestHandledEvent

    这是一个 web-specific 事件,告诉所有 bean HTTP 请求已经被服务。
     

    由于 Spring 的事件处理是单线程的,所以如果一个事件被发布,直至并且除非所有的接收者得到的该消息,该进程被阻塞并且流程将不会继续。因此,如果事件处理被使用,在设计应用程序时应注意。

    监听上下文事件

    为了监听上下文事件,一个 bean 应该实现只有一个方法 onApplicationEvent() 的 ApplicationListener 接口。因此,我们写一个例子来看看事件是如何传播的,以及如何可以用代码来执行基于某些事件所需的任务。

    让我们在恰当的位置使用 eclipse IDE,然后按照下面的步骤来创建一个 Spring 应用程序:

    步骤 描述
    1 创建一个名称为 SpringExample 的项目,并且在创建项目的 src 文件夹中创建一个包 com.tutorialspoint。
     
    2 使用 Add External JARs 选项,添加所需的 Spring 库,解释见 Spring Hello World Example 章节。
     
    3 在 com.tutorialspoint 包中创建 java 类 HelloWorld、CStartEventHandler、CStopEventHandler 和 MainApp。
     
    4 src 文件夹中创建 Bean 的配置文件 Beans.xml
     
    5 最后一步是创建的所有 java 文件和 Bean 配置文件的内容,并运行应用程序,解释如下所示。
     

    这里是 HelloWorld.java 文件的内容:

    package com.tutorialspoint;
    public class HelloWorld {
       private String message;
       public void setMessage(String message){
          this.message  = message;
       }
       public void getMessage(){
          System.out.println("Your Message : " + message);
       }
    }

    下面是 CStartEventHandler.java 文件的内容:

    package com.tutorialspoint;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextStartedEvent;
    public class CStartEventHandler 
       implements ApplicationListener<ContextStartedEvent>{
       public void onApplicationEvent(ContextStartedEvent event) {
          System.out.println("ContextStartedEvent Received");
       }
    }

    下面是 CStopEventHandler.java 文件的内容:

    package com.tutorialspoint;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextStoppedEvent;
    public class CStopEventHandler 
       implements ApplicationListener<ContextStoppedEvent>{
       public void onApplicationEvent(ContextStoppedEvent event) {
          System.out.println("ContextStoppedEvent Received");
       }
    }

    下面是 MainApp.java 文件的内容:

    package com.tutorialspoint;
    
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MainApp {
       public static void main(String[] args) {
          ConfigurableApplicationContext context = 
          new ClassPathXmlApplicationContext("Beans.xml");
    
          // Let us raise a start event.
          context.start();
    
          HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
    
          obj.getMessage();
    
          // Let us raise a stop event.
          context.stop();
       }
    }

    下面是配置文件 Beans.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
       <bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
          <property name="message" value="Hello World!"/>
       </bean>
    
       <bean id="cStartEventHandler" 
             class="com.tutorialspoint.CStartEventHandler"/>
    
       <bean id="cStopEventHandler" 
             class="com.tutorialspoint.CStopEventHandler"/>
    
    </beans>

    一旦你完成了创建源和 bean 的配置文件,我们就可以运行该应用程序。如果你的应用程序一切都正常,将输出以下消息:

    ContextStartedEvent Received
    Your Message : Hello World!
    ContextStoppedEvent Received
    
    
    

    感觉本站内容不错,读后有收获?

    我要小额赞助,鼓励提供更好的内容教程

    上一篇Spring 基于 Java 的配置 下一篇:Spring 中的自定义事件
    Copyright 2013-2017 Powered by 狗鱼MySQL教程,All Rights Reserved.
    广州相如计算机科技有限有限公司 版权所有 粤ICP备08130661号-4
    售前咨询:020-38667011 手机:13711588918