那怎么才能拿到呢?
前面Bean生命周期那节说过 , 可以通过are接口拿到 , 甚至你可以通过实现直接获取到isher , 其实获取到的isher也就是 , 因为是实现了isher 。
话不多说 , 上代码
就以上面的火灾为例
第一步:创建一个火灾事件类
火灾事件类继承
// 火灾事件
class{
public FireEvent(String source) {super(source);}
}
第二步:创建火灾事件的监听器
打119的火灾事件的监听器:
class ener{
@Overridepublic void onApplicationEvent(FireEvent event) {System.out.println("打119");}
}
救人的火灾事件的监听器:
class{
@Overridepublic void onApplicationEvent(FireEvent event) {System.out.println("救人");}
}
事件和对应的监听都有了 , 接下来进行测试:
class{
public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();//将 事件监听器 注册到容器中applicationContext.register(Call119FireEventListener.class);applicationContext.register(SavePersonFireEventListener.class);applicationContext.refresh();// 发布着火的事件 , 触发监听applicationContext.publishEvent(new FireEvent("着火了"));}
}
将两个事件注册到容器中 , 然后发布事件
运行结果:
打119
救人
控制台打印出了结果 , 触发了监听 。
如果现在需要对火灾进行救火 , 那么只需要去监听 , 实现救火的逻辑 , 注入到容器中 , 就可以了 , 其余的代码根本不用动 。
内置的事件
内置的事件很多 , 这里我罗列几个
事件类型 触发时机
t 在调用 接口中的()方法时触发
在调用的start()方法时触发
在调用的stop()方法时触发
当被关闭时触发该事件 , 也就是调用close()方法触发
在容器启动的过程中 , 会发布这些事件 , 如果你需要这容器启动的某个时刻进行什么操作 , 只需要监听对应的事件即可 。
事件的传播
事件的传播是什么意思呢?
我们都知道 , 在中有子父容器的概念 , 而事件的传播就是指当通过子容器发布一个事件之后 , 不仅可以触发在这个子容器的事件监听器 , 还可以触发在父容器的这个事件的监听器 。
上代码
class ation {
public static void main(String[] args) {// 创建一个父容器AnnotationConfigApplicationContext parentApplicationContext = new AnnotationConfigApplicationContext();//将 打119监听器 注册到父容器中parentApplicationContext.register(Call119FireEventListener.class);parentApplicationContext.refresh();// 创建一个子容器AnnotationConfigApplicationContext childApplicationContext = new AnnotationConfigApplicationContext();//将 救人监听器 注册到子容器中childApplicationContext.register(SavePersonFireEventListener.class);childApplicationContext.refresh();// 设置一下父容器childApplicationContext.setParent(parentApplicationContext);// 通过子容器发布着火的事件 , 触发监听childApplicationContext.publishEvent(new FireEvent("着火了"));}
}
创建了两个容器 , 父容器注册了打119的监听器 , 子容器注册了救人的监听器 , 然后将子父容器通过关联起来 , 最后通过子容器 , 发布了着火的事件 。
运行结果:
救人
打119
从打印的日志 , 的确可以看出 , 虽然是子容器发布了着火的事件 , 但是父容器的监听器也成功监听了着火事件 。
- 三万字盘点Spring/Boot的那些常用扩展点
- 盘点7个高性价比皮带品牌,简洁百搭广受欢迎 中国皮带十大名牌
- 盘点古代史上30大惊人酷刑:割喉剖腹太吓人了!
- 盘点中国历史上八个奇葩兵器,第四个让人闻风丧胆!
- 盘点西游记中最好看的女妖精到底是谁。 世界之最妖精
- 盘点历史上的6大天灾,日本地震没资格上榜,乌克兰饥荒差点灭国 世界之最黑死病
- 世界上最著名的十把步枪盘点 世界之最步枪
- 清朝吃货大盘点:大学士纪晓岚也是大胃王
- 盘点三国中那些被秒杀的武将:潘凤最惨
- 闻香识女人,盘点世界经典十大香水品牌 世界十大奇迹香水