`
wusuoya
  • 浏览: 643136 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

spring 事件机制

    博客分类:
  • SSH
 
阅读更多

在Spring中已经定义的五个标准事件: 

  1)   ContextRefreshedEvent:当ApplicationContext初始化或者刷新时触发该事件。 

  2)   ContextClosedEvent:当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。 

  3)   RequestHandleEvent:在Web应用中,当一个http请求(request)结束触发该事件。 

  4)   ContestStartedEvent:Spring2.5新增的事件,当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。 

  5)   ContestStopedEvent:Spring2.5新增的事件,当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。 

  下面通过一个例子展示如何处理Spring内定的事件(例程3.8)。创建一个Java工程,添加Spring开发能力后,新建ioc.test包。在包中新建ApplicationEventListener类,实现ApplicationListener接口,在onApplicationEvent()方法中添加事件处理代码,如下: 

Java代码  收藏代码
  1. package ioc.test;  
  2.   
  3. // Import省略  
  4. public class ApplicationEventListener implements ApplicationListener {  
  5.   
  6.   public void onApplicationEvent(ApplicationEvent event) {  
  7.   
  8.     //如果是容器刷新事件  
  9.     if(event instanceof ContextClosedEvent ){  
  10.       System.out.println(event.getClass().getSimpleName()+" 事件已发生!");    
  11.     }else if(event instanceof ContextRefreshedEvent ){//如果是容器关闭事件  
  12.       System.out.println(event.getClass().getSimpleName()+" 事件已发生!");    
  13.     }else if(event instanceof ContextStartedEvent ){  
  14.       System.out.println(event.getClass().getSimpleName()+" 事件已发生!");  
  15.     }else if(event instanceof ContextStoppedEvent){  
  16.       System.out.println(event.getClass().getSimpleName()+" 事件已发生!");  
  17.     }else{  
  18.       System.out.println("有其它事件发生:"+event.getClass().getName());  
  19.     }  
  20.            
  21.   }  
  22.   
  23. }  



  在Spring配置文件中定义一个Bean,类为ApplicationEventListener,代码如下: 

1 <?xml version="1.0" encoding="UTF-8"?> 
2 <beans …………>  

4  <bean id="ApplicationEventListener" class="ioc.test.ApplicationEventListener" /> 

6 </beans> 


  添加含有主方法的TesMain类,在主方法中,调用容器的相应方法,触发Spring内定事件,代码如下: 

Java代码  收藏代码
  1. package ioc.test;  
  2. //import省略  
  3. public class TesMain {  
  4.   
  5.   public static void main(String[] args) {  
  6.      AbstractApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");  
  7.       
  8.   
  9.       //  ac.refresh();//触发ContextRefreshedEvent事件        
  10.      ac.start(); //触发ContextStartedEvent事件  
  11.      ac.stop(); //触发ContextStoppedEvent事件      
  12.      ac.close(); //关闭容器,触发ContextClosedEvent事件  
  13.   
  14.    }  
  15.  }  


  

  从例子中可以知道,要注册事件监听器,我们只需要把它配置成一个Bean即可,ApplicationContext容器会自动将其注册。 

============================================================== 

1、监听事件 
写一个class 实现 ApplicationListener 接口, 并且在spring 项目中进行配置,当spring 有事件发布时便会调用ApplicationListener 接口的void onApplicationEvent(ApplicationEvent evnet) 方法。 
2、 发布事件定义 
事件Class 要继承ApplicationEvent class 
3、事件发布 使用 ApplicationContext.publishEvent(evnet); 

当事件发布时所有的监听器ApplicationListener 都会收到事件通知, 
如果bean 要发布事件要得到当前的ApplicationContext引用,需要实现ApplicationContextAware接口 

实现BeanFactoryAware接口的class 能自动由环境中获得beanFactory接口, 
需要强制转换为ApplicationContext 

======================================================= 
定义事件 

Java代码  收藏代码
  1. public class ActionEvent extends ApplicationEvent {  
  2. public ActionEvent(Object source) {  
  3. super(source);  
  4. }  
  5. }  



发布事件 

Java代码  收藏代码
  1. public class LoginAction implements ApplicationContextAware {  
  2. private ApplicationContext applicationContext;  
  3. public void setApplicationContext(  
  4. ApplicationContext applicationContext  
  5. )  
  6. throws BeansException {  
  7. this.applicationContext = applicationContext;  
  8. }  
  9. public int login(String username,String password) {  
  10. ActionEvent event = new ActionEvent(username);  
  11. this.applicationContext.publishEvent(event);  
  12. return 0;  
  13. }  
  14. }  



事件监听 

Java代码  收藏代码
  1. public class ActionListener implements ApplicationListener {  
  2. public void onApplicationEvent(ApplicationEvent event) {  
  3. if (event instanceof ActionEvent) {  
  4. System.out.println(event.toString());  
  5. }  
  6. }  
  7. }  



配置bean 
<bean id="loginaction" class="beans.LoginAction"/> 
<bean id="listener" class="beans.ActionListener"/> 

测试 

Java代码  收藏代码
  1. ApplicationContext ctx=new  
  2. FileSystemXmlApplicationContext("bean.xml");  
  3. LoginAction action = (LoginAction)ctx.getBean("action");  
  4. action.login("Erica","mypass");  

 

分享到:
评论

相关推荐

    使用Spring事件机制实现异步的方法

    使用Spring事件机制实现异步的方法 Spring框架提供了一种事件机制,允许开发者将代码解耦合,实现松散耦合的设计理念。这里将详细介绍如何使用Spring事件机制实现异步的方法。 事件机制的实现主要包括三个部分:...

    spring事件机制

    Spring框架的事件机制是其核心特性之一,它提供了一种基于发布-订阅模式的事件处理方式,使得在Spring应用中的不同组件之间可以进行解耦通信。这个机制允许一个组件(通常是一个服务)触发一个事件,然后其他感兴趣...

    详解Spring事件驱动模型

    一、Spring事件机制的工作流程 1. 定义事件:创建自定义的事件类,继承自`ApplicationEvent`。例如,可以创建一个`CustomEvent`表示特定业务操作完成的事件。 2. 注册监听器:编写`ApplicationListener`接口的实现...

    JAVA-spring学习资源之spring事件

    总结来说,Spring事件机制为组件间的通信提供了一种灵活的方式,减少了组件之间的耦合。理解和掌握这一特性,将有助于你构建更加健壮、易于维护的Spring应用程序。通过实践和探索"JAVA-spring学习资源之spring事件...

    spring笔试题选择和简答题和springboot+cloud选择题和简答题

    Spring Boot+Spring Cloud 试题解析 Spring Boot 是一个基于 Java 的框架,...这些题目涵盖了 Spring Boot 和 Spring Cloud 的基础知识,包括配置文件的读取、日志框架的选择、热部署方式、事件机制、断路器的作用等。

    Spring的事件监听机制示例详解

    Spring的事件监听机制示例详解 事件监听机制是Spring Framework中的一种机制,它允许应用程序在特定的事件发生时执行相应的操作。事件监听机制由事件发布者、事件监听者和事件广播者三个部分组成。在Spring中,事件...

    深入探索Spring事件监听机制:技术与应用

    Spring事件监听机制是Spring框架中的一个重要特性,它基于经典的观察者模式,允许应用程序组件之间进行松耦合的通信。在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(Application...

    my_springboot_01.rar

    标题 "my_springboot_01.rar" 涉及的是Spring Boot项目,其中的核心话题是"Spring事件机制(观察者模式)"。这个压缩包包含了一系列与Spring Boot项目开发相关的文件,如构建脚本、配置文件、源代码等。 在Spring...

    event.rar-Spring事件监听机制

    在Spring框架中,事件监听机制是一种非常重要的组件间通信方式,它允许应用程序的不同部分通过发布和订阅事件来进行异步通信。这种模式使得组件之间松耦合,提高了代码的可维护性和可扩展性。下面我们将详细探讨...

    涵盖了 Spring 框架的核心概念和关键功能,包括控制反转(IOC)容器的使用,面向切面编程(AOP)的原理与实践等

    涵盖了 Spring 框架的核心概念和关键功能,包括控制反转(IOC)容器的使用,面向切...此外,它还包含了 Spring 事件机制的应用、高级主题如缓存抽象和响应式编程,以及对 Spring 源码的编程风格与设计模式的深入探讨。

    EventBus与Spring Event区别详解(EventBus 事件机制,Spring Event事件机制)

    Spring Event的事件机制可以与Spring Framework的其他组件集成,例如Spring MVC、Spring Boot等。这种机制可以使应用程序更加灵活和可扩展。 EventBus与Spring Event的区别 EventBus和Spring Event都是事件机制,...

    spring事件的例子

    在Spring框架中,事件处理是一种重要的组件间通信方式。它允许一个对象在完成特定操作后,通知其他对象这一事实,而无需这些对象之间有直接的依赖关系。这种机制基于Java的观察者模式(Observer Pattern),使得松...

    spring 事件处理

    在Spring框架中,事件处理是一种重要的通信机制,它允许组件之间进行解耦的通信。Spring事件处理基于发布/订阅模式,其中事件是消息的载体,而事件监听器则是对这些消息感兴趣的订阅者。在这个场景中,我们将探讨...

    深入分析Spring源码.docx

    8. **观察者模式**:Spring事件机制中,事件发布者和订阅者之间的交互基于观察者模式,使得组件间的通信更加灵活。 9. **责任链模式**:Spring的过滤器链、拦截器链等都是责任链模式的应用,实现了一次请求由多个...

    spring缓存机制-入门实例

    在Spring框架中,缓存机制是一项重要的功能,它允许我们高效地存储和检索频繁访问的数据,从而提升应用程序的性能。本篇文章将深入探讨Spring缓存机制的基础知识,并通过一个入门实例来阐述其工作原理和使用方法。 ...

    spring运行机制源码剖析

    Spring框架是Java开发中最常用的轻量级框架之一,它的运行机制源码剖析是理解其工作原理的关键。在本文中,我们将深入探讨Spring的核心组件、依赖注入(DI)以及AOP(面向切面编程)的实现。 首先,让我们从Spring...

    Spring 框架的设计理念与设计模式分析

    6. 观察者模式:Spring事件机制中,应用了观察者模式,允许组件之间进行事件通知和响应。 Spring的这些设计模式使得开发者能够更高效地组织代码,提高可维护性和可扩展性。同时,Spring的模块化设计使得我们可以按...

    Spring 设计模式总结1

    7. **观察者模式**:Spring事件机制基于观察者模式,当某个事件发生时,所有注册的监听器都会收到通知。例如,`ApplicationListener`接口可用于监听Spring应用上下文的事件。 8. **策略模式**:Spring允许使用不同...

    SpringCloud常见选择题28道(附答案).docx

    11. Spring的事件机制采用的是订阅和发布模式,即`@EventListener`订阅事件,`ApplicationEventPublisher`发布事件。 12. SpringBoot热部署的一种方式是通过`spring-boot-devtools`,它提供了简化版本控制和自动重启...

    SPRING事务机制DEMO

    Spring事务机制是Java开发中非常重要的一个概念,它在企业级应用中扮演着核心角色,确保数据的一致性和完整性。Spring提供了多种事务管理方式,包括编程式事务管理和声明式事务管理。在这篇DEMO中,我们将重点探讨...

Global site tag (gtag.js) - Google Analytics