自定义的事件监听与处理框架。
如果只想监听到自已所关心的事件呢,那么就要自已实现一套事件处理的小框架了:
首先重新定义事件监听器接口,不再使用SPRING提供的ApplicationListener接口:
- import java.util.List;
-
-
-
-
- public interface IBaseEventListener {
-
-
-
- public void onBaseEvent(BaseEvent event);
-
-
-
-
- public List<Class<? extends BaseEvent>> getEventClasses();
- }
这个接口比SPRING的事件接口多了一个方法。因为SPRING原来做法是只要实现了它提供的接口,任何事件发生时都会得到调用,这种做法是很方便使用的,这里沿用了这种思路。多出的那个方法作用是描述本类处理哪些事件。这时我需要一个类,这个类要在系统启动时把所有实现此接口的业务类找出来,归好类,以便事件发生时进行精确调用,并且提供事件发布事件的静态方法,这样我们才能知道事件在何时发生了。好,下面就来编写这个类
-
-
-
- public class EventController {
-
- private static Map<String,List<IBaseEventListener>> listeners = new LinkedHashMap<String, List<IBaseEventListener>>();
-
- private EventController(){
-
- }
-
-
-
-
-
-
-
-
-
-
- public static void initBaseEventListener(){
-
- Map<String,IBaseEventListener> beans = ContextLoader.getCurrentWebApplicationContext().getBeansOfType(IBaseEventListener.class);
- if(beans==null || beans.size()==0)
- return;
-
- Collection<IBaseEventListener> services = beans.values();
- for (IBaseEventListener service : services) {
- List<Class<? extends BaseEvent>> eventClasses = service.getEventClasses();
- if(eventClasses==null || eventClasses.size()==0)
- continue;
-
- for (int i = 0; i < eventClasses.size(); i++) {
- List<IBaseEventListener> list = listeners.get(eventClasses.get(i).getName());
- if(list==null){
- list = new ArrayList<IBaseEventListener>();
- listeners.put(eventClasses.get(i).getName(), list);
- list.add(service);
- }else{
- if(list.contains(service)){
- continue;
- }else{
- list.add(service);
- }
- }
- }
- }
- }
-
-
-
-
- public static void publishEvent(BaseEvent event){
-
- List<IBaseEventListener> list = listeners.get(event.getClass().getName());
- if(list!=null && list.size()>0){
- for (IBaseEventListener listener : list) {
-
- listener.onBaseEvent(event);
- }
- }
- }
- }
接着重新定义事件类本身,此类也不再继承SPRING的ApplicationEvent类,其它基本还和原来一样。
- public class BaseEvent {
- private Object source;
- public BaseEvent() {
- }
-
- public BaseEvent(Object source) {
- this.source = source;
- }
-
- public Object getSource() {
- return source;
- }
- }
业务类顶层接改而继承自已的事件接口
-
-
-
- public interface IBaseService extends IBaseEventListener{
-
- }
分享到:
相关推荐
总结来说,Spring自定义注解和AOP的结合使用,让我们能够灵活地在代码中插入跨切面的关注点,如日志记录、事务管理、性能监控等,而不必在每个方法中手动添加这些代码。这不仅提高了代码的整洁度,也使得系统更加...
首先,了解Spring中的属性编辑器机制。Spring会自动寻找并使用`java.beans.PropertyEditor`接口的实现来处理类型转换。这个接口定义了两个主要方法:`setAsText()`用于将字符串转换为对象,`getAsText()`则用于将...
总的来说,Spring自定义注解的解析是一个强大且灵活的工具,可以帮助我们实现更精细化的代码组织和控制。结合`@ComponentScan`,我们可以轻松地在Spring环境中管理和利用自定义注解,进一步提升代码的可读性和可维护...
在Spring框架中,事件处理是一种重要的通信机制,它允许组件之间进行解耦的通信。Spring事件处理基于发布/订阅模式,其中事件是消息的载体,而事件监听器则是对这些消息感兴趣的订阅者。在这个场景中,我们将探讨...
此外,Spring Security还提供了丰富的授权机制,如角色和权限控制。我们可以通过在URL前添加@Secured或@PreAuthorize注解,或者在配置类中定义访问规则,来限制对特定资源的访问。这使得我们可以根据用户的角色和...
这个名为"Spring自定义配置文件便签[Maven]工程可运行"的项目,显然是一个基于Maven构建的Spring 5.0应用程序,它包含了自定义配置文件和标签的实现。让我们深入探讨一下这些概念及其在实际应用中的作用。 首先,...
Spring事件监听机制是Spring框架中的一个重要特性,它基于经典的观察者模式,允许应用程序组件之间进行松耦合的通信。在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(Application...
通过本文介绍的自定义异常处理逻辑,可以有效解决Spring Cloud Gateway默认异常处理机制中存在的问题,使得异常信息更加符合业务需求。此外,这种方式也为开发者提供了一个良好的起点,可以根据具体项目需求进一步...
本文将深入剖析Spring 5.2.9版本中自定义标签的解析过程,旨在帮助读者理解Spring内部的工作机制。 首先,我们了解自定义标签的基本概念。在Spring中,自定义标签通常是通过实现`org.springframework.beans.factory...
Spring 自定义注解和 Aspect 的使用 在本文中,我们将学习如何在 Spring 项目中使用自定义注解和 Aspect 来实现日志记录功能。...* Spring 中的 AOP 机制 * 使用自定义注解和 Aspect 来实现日志记录功能
总结起来,Spring的自定义标签解析是通过`NamespaceHandler`机制实现的,而注解解析则依赖于类路径扫描和`BeanDefinition`的创建。这两者都是Spring实现声明式编程和依赖注入的重要组成部分,极大地简化了Spring应用...
Spring事件处理还支持事件分发策略,如多线程处理事件,可以通过配置`SimpleApplicationEventMulticaster`或自定义实现`ApplicationEventMulticaster`接口来调整事件的传播方式。 此外,Spring还提供了`...
开发者可以根据需要自定义事件和事件监听器,实现灵活的异步处理机制。 Spring事件机制的优点包括: * 松散耦合的设计理念,提高代码的可维护性和可扩展性。 * 事件机制可以解耦合业务逻辑和非业务逻辑,提高代码...
在Spring中,我们可以创建一个自定义的BeanPostProcessor实现,它会在Spring容器初始化bean之后、bean被其他bean使用之前,对bean进行额外的处理,比如执行特定的方法。 3. **BeanPostProcessor**:Spring的...
Spring框架的事件机制是其核心特性之一,它提供了一种基于发布-订阅模式的事件处理方式,使得在Spring应用中的不同组件之间可以进行解耦通信。这个机制允许一个组件(通常是一个服务)触发一个事件,然后其他感兴趣...
本节将深入探讨Spring 5.2.9版本中自定义标签的解析机制,以及背后的源码实现。 首先,Spring XML配置文件中的自定义标签是由Spring的`BeanDefinitionParser`接口处理的。这个接口定义了`parse()`方法,用于解析...
这个过滤器可以在认证阶段处理特定的场景,如自定义的认证机制、特殊的身份验证令牌处理等。在实际应用中,可能还需要根据项目需求进行更复杂的定制,比如集成OAuth2、JWT或其他安全协议。 在提供的压缩包文件...
总的来说,Spring自定义标签和注解解析原理的学习,不仅能够帮助开发者深入理解Spring的工作机制,还能提供自定义配置和扩展Spring功能的能力。通过这种方式,开发者可以根据项目需求创建出更符合业务逻辑的配置方式...
在使用Spring框架中的`RestTemplate`进行HTTP请求时,我们可能会遇到各种异常情况,如服务超时、服务不存在等,这些异常...在实际项目中,这种自定义处理机制非常实用,能够帮助我们更好地管理和服务调用的错误情况。
在自定义MVC框架时,首先要实现请求分发机制。DispatcherServlet在Spring MVC中扮演着关键角色,它接收所有HTTP请求,解析请求信息,然后根据请求映射信息找到对应的Handler(控制器)。我们可以仿照这个设计,创建...