`
dongguoh
  • 浏览: 70582 次
  • 性别: Icon_minigender_1
  • 来自: 山水之乡
社区版块
存档分类
最新评论

Spring 中事件的传递

阅读更多

LockedIPEvent.java

java 代码
  1. package com.gjx.spring.event;   
  2.   
  3. import org.springframework.context.ApplicationEvent;   
  4.   
  5. public class LockedIPEvent extends ApplicationEvent {   
  6.   
  7.     public LockedIPEvent(Object source) {   
  8.         super(source);   
  9.     }   
  10.   
  11. }   

LockedIPListener.java

java 代码
  1. package com.gjx.spring.event;   
  2.   
  3. import org.apache.commons.logging.Log;   
  4. import org.apache.commons.logging.LogFactory;   
  5. import org.springframework.context.ApplicationEvent;   
  6. import org.springframework.context.ApplicationListener;   
  7.   
  8. public class LockedIPListener implements ApplicationListener {   
  9.     //在这里,监听器应该只作一个记录功能   
  10.     private Log logger=LogFactory.getLog(LockedIPListener.class);   
  11.     public void onApplicationEvent(ApplicationEvent event) {   
  12.         if (event instanceof LockedIPEvent) {   
  13.             logger.info("Locked IP  ["+event.getSource()+"] try to login !");   
  14.         }   
  15.     }   
  16.   
  17. }   

UserManager.java

java 代码
  1. package com.gjx.spring.event;   
  2.   
  3. import java.util.List;   
  4.   
  5. import org.springframework.beans.BeansException;   
  6. import org.springframework.context.ApplicationContext;   
  7. import org.springframework.context.ApplicationContextAware;   
  8.   
  9. /*实现啦这个接口就会通过ApplicationContext来取得 这是一个接口的注入  
  10.  * 如果使用这样的事件就会和Spring 偶合在一起啦  
  11.  *   
  12.  */  
  13. public class UserManager implements ApplicationContextAware {   
  14.     private List lockedIPList;   
  15.   
  16.     private ApplicationContext context;   
  17.     public List getLockedIPList() {   
  18.         return lockedIPList;   
  19.     }   
  20.   
  21.     public void setLockedIPList(List lockedIPList) {   
  22.         this.lockedIPList = lockedIPList;   
  23.     }   
  24.     public boolean isLogin(String username,String password,String ip){   
  25.         if(lockedIPList.contains(ip)){   
  26.             context.publishEvent(new LockedIPEvent(ip)); //发布这个事件   
  27.             return true;   
  28.         }   
  29.         return false;   
  30.     }   
  31.   
  32.     public void setApplicationContext(ApplicationContext context) throws BeansException {   
  33.         this.context=context;   
  34.            
  35.     }   
  36. }   

beans.xml

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3.   
  4. <beans>  
  5.        
  6.     <!-- 监听器类的ID设不设置都无所谓 ,如果不想要日志信息,直接删掉下面这句就OK啦。所以很方便-->  
  7.     <bean class="com.gjx.spring.event.LockedIPListener"/>  
  8.        
  9.     <bean id="userManager" class="com.gjx.spring.event.UserManager">  
  10.         <property name="lockedIPList">  
  11.             <list>  
  12.                 <value>222.111.111.4</value>  
  13.                 <value>222.111.111.7</value>  
  14.                 <value>222.111.111.9</value>  
  15.             </list>  
  16.         </property>  
  17.     </bean>  
  18. </beans>  

JUnit的测试代码

TestSpring.java

java 代码
  1. package Test.com.gjx.spring;   
  2.   
  3. import java.io.BufferedOutputStream;   
  4. import java.io.IOException;   
  5. import java.io.InputStream;   
  6. import java.util.Date;   
  7. import java.util.Locale;   
  8.   
  9. import junit.framework.TestCase;   
  10.   
  11. import org.springframework.context.ApplicationContext;   
  12. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  13. import org.springframework.context.support.GenericApplicationContext;   
  14. import org.springframework.core.io.Resource;   
  15.   
  16. import com.gjx.spring.HelloAction;   
  17. import com.gjx.spring.event.UserManager;   
  18.   
  19. public class TestSpring extends TestCase {     
  20.   
  21.     public void testEvent() {   
  22.         ApplicationContext context = new ClassPathXmlApplicationContext(   
  23.                 "beans.xml");   
  24.         UserManager userManager = (UserManager) context.getBean("userManager");   
  25.         userManager.isLogin("冬国""1234567""222.111.111.4");   
  26.     }   
  27. }   

测试结果:

 Locked IP  [222.111.111.4] try to login !

分享到:
评论

相关推荐

    Spring中ApplicationContext对事件传递

    ### Spring框架中ApplicationContext的事件传递机制详解 #### 一、引言 在Spring框架中,事件处理机制是一项非常重要的功能,它使得应用可以更加灵活地响应各种系统内部或外部的事件变化。本篇文章将深入探讨...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    总的来说,理解并熟练运用Spring中Bean的生命周期和ApplicationContext,能帮助开发者更高效地设计和维护Spring应用,同时利用国际化和事件传递提高应用的灵活性和可扩展性。在实践中,这些概念和机制是构建复杂、...

    spring事件的例子

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

    Spring事件管理

    在Spring框架中,事件管理是一种强大的机制,它允许在应用程序组件之间传递消息,而无需这些组件之间有直接的依赖关系。这种松耦合的方式提高了代码的可维护性和可测试性。接下来,我们将深入探讨Spring事件管理的...

    详解Spring事件驱动模型

    3. 发布事件:在需要触发事件的地方,调用`ApplicationContext`的`publishEvent`方法,将事件对象传递给Spring容器。 4. 处理事件:Spring容器会自动查找所有注册的`ApplicationListener`,并将事件分发给它们。每...

    spring中监听事件

    在Spring框架中,事件监听是一种常见的模式,用于在应用程序中实现不同组件之间的解耦通信。这一机制使得系统可以在不直接依赖彼此的情况下,传递信息和触发响应。本文将深入探讨Spring中的事件监听机制,并通过源码...

    SpringCloud中文文档

    这些功能可以帮助开发人员快速地支持实现分布式系统中的常见模式,例如服务注册和发现、路由、服务调用、负载均衡、断路器、分布式消息传递等。 Spring Cloud 的目标是提供良好的开箱即用经验和可扩展性机制,覆盖...

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

    事件是继承自Spring提供的ApplicationEvent类的自定义类,用于封装要传递的数据。在上面的代码中,MyEvent类继承自ApplicationEvent,封装了一个字符串msg。 事件监听器是实现了ApplicationListener接口的类,用于...

    springSecurity 实现传参

    在这个场景中,我们关注的是如何使用Spring Security实现登录验证以及在登录过程中传递参数,特别是记录并返回用户登录前的页面。我们将深入探讨这个过程,并结合MySQL数据库的使用。 首先,让我们了解Spring ...

    spring事件机制

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

    spring学习: spring mvc在redirect请求中传递数据

    标题中的“spring学习:spring mvc在redirect请求中传递数据”指的是在Spring MVC框架中,如何在重定向(Redirect)请求过程中传递参数。这通常涉及到HTTP响应的状态码、重定向URL以及模型数据的处理。在Spring MVC...

    JAVA-spring学习资源之spring事件

    Spring事件是基于观察者模式实现的,它提供了一种在应用程序组件之间传递信息的方式,而无需这些组件之间有直接的依赖关系。这使得系统更加灵活和可扩展。 1、**Spring事件发布**: 在Spring中,事件通常是一个Java...

    J2EE企业级项目开发-1期 08 Spring中事件处理的小技巧.doc

    这个类通常会包含事件相关的数据,比如上面例子中的`MessageEvent`,它包含了要传递的消息。 2. **发布事件**:创建一个类来负责发布事件,这个类需要实现`ApplicationContextAware`接口。在`setApplicationContext...

    spring 事件监听 3种方式

    在Spring框架中,事件监听是一种实现模块间解耦的有效手段,它允许我们在应用程序的不同部分之间传递消息,而无需直接依赖。本篇文章将详细介绍Spring事件监听的三种方式:基于接口的监听器、基于类的监听器以及基于...

    Spring MVC参数传递

    Spring MVC传参是Spring学习中的比较容易混淆的地方,因为传参方式种类多,接受参数种类多,初学者较容易因为不懂HTTP参数传递原理,而摸不着头脑,该篇文章介绍Spring MVC参数绑定的几种方式(包括json和普通文本)

    Spring Mvc参数传递例子

    Spring MVC传参是Spring学习中的比较容易混淆的地方,因为传参方式种类多,接受参数种类多,初学者较容易因为不懂HTTP参数传递原理,而摸不着头脑,该篇文章介绍Spring MVC参数绑定的几种方式。

    Spring IOC传递类实例

    本实例主要探讨如何通过Spring的IOC容器来传递类实例,实现接口传值。 首先,我们需要了解Spring的配置文件。在Spring应用中,bean的定义通常在XML配置文件中完成。例如,我们可以创建一个名为`beans.xml`的配置...

    spring MVC中传递对象参数示例详解

    Spring MVC 中传递对象参数示例详解 在 Spring MVC 框架中,传递对象参数是非常常见的操作,然而,很多初学者可能不知道如何正确地传递对象参数,或者不知道 @RequestParam 和 @ModelAttribute 的区别。本文将详细...

    spring-cloud-bus:Spring Cloud事件总线

    1. **事件(Event)**:在Spring Cloud Bus中,事件是一种消息类型,用于在系统中传递信息。当某个微服务发生特定事件时,如配置更新,它会发布一个事件到总线上,其他订阅了该事件的微服务会接收到这个消息并作出...

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

    首先,事件(ApplicationEvent)是Spring框架中事件的核心。Spring内置了一些预定义的事件类型,如ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent和ContextClosedEvent,它们分别对应于Spring...

Global site tag (gtag.js) - Google Analytics