你能明白这种方法的使用吗
前面讲到要使自定义注解生效需要写一段驱动代码,那驱动代码什么开始执行比较合适呢?大家可能知道答案:应用启动的时候。 回到具体的代码实现中,假设应用程序(客户端或服务端)依赖了 RPC框架并且使用了Spring环境,对Spring比较熟悉的小伙伴应该知道,Spring在启动的过程中会初始化bean,那是不是可以在初始化bean之后去执行这段驱动代码呢?答案是肯定的。 查阅相关资料后,Spring 监听器可以实现上面这个诉求。 监听器在使用过程中可以监听某些感兴趣的事件,监听到事件来临时可以做出响应处理。 Spring事件监听体系包括三大核心组件:事件监听器、事件、事件广播器。 事件广播器或者叫事件多播器负责广播发生的事件并通知所有监听器,所有的事件监听器都会提前注册在事件广播器中。 所有的动作都可能被定义为一个事件,事件发生后事件广播器通知所有的监听器,监听器根据情况做出响应。 Spring 定义了一个事件基类:ApplicationEvent,看一下源码: public abstract class ApplicationEvent extends EventObject { /** 事件发生的时间 */ private final long timestamp; /** * 创建一个实例 * @param source 事件来源 */ public ApplicationEvent(Object source){ super(source); this.timestamp = System.currentTimeMillis(); } ……省略其他代码 } ApplicationEvent 继承 JDK 定义的事件基类:EventObject, public class EventObject implements java.io.Serializable { /** * The object on which the Event initially occurred. */ protected transient Object source; ……省略其他代码 } ApplicationEvent 是一个抽象类,如果需要自定义事件需要继承这个类: public class MyEvent extends ApplicationEvent { ……省略其他代码 } 当然 Spring 自身已经定义了非常多的事件: ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。初始化是指所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。 ContextStartedEvent:ApplicationContext 启动后,该事件被发布。 ContextStoppedEvent:ApplicationContext 停止后,该事件被发布。 ContextClosedEvent:ApplicationContext 关闭后,该事件被发布。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |