Showing
1 changed file
with
11 additions
and
11 deletions
@@ -14,26 +14,26 @@ yohobuy事件及系统监控机制的实现逻辑 | @@ -14,26 +14,26 @@ yohobuy事件及系统监控机制的实现逻辑 | ||
14 | 14 | ||
15 | #### 初始化: | 15 | #### 初始化: |
16 | 16 | ||
17 | - 在容器启动的时候,AbstractApplicationContext会首先找有没有用户配置的事件广播器ApplicationEventMulticaster,如果有则加载进来, | ||
18 | - 没有则加载默认的事件广播器SimpleApplicationEventMulticaster。 | ||
19 | - 然后spring会通过反射机制将所有实现了事件监听器接口ApplicationListener的bean注册到事件广播器的监听器注册表中。 | 17 | +在容器启动的时候,AbstractApplicationContext会首先找有没有用户配置的事件广播器ApplicationEventMulticaster,\n |
18 | +如果有则加载进来,没有则加载默认的事件广播器SimpleApplicationEventMulticaster。 | ||
19 | +然后spring会通过反射机制将所有实现了事件监听器接口ApplicationListener的bean注册到事件广播器的监听器注册表中。 | ||
20 | 20 | ||
21 | #### 事件发布和处理: | 21 | #### 事件发布和处理: |
22 | 22 | ||
23 | - 只要是实现了ApplicationEventPublisherAware接口的bean,spring会将事件发布者实际就是ApplicationContext设置到该bean中。 | ||
24 | - 要发布事件就调用ApplicationEventPublisher的publishEvent方法,在该方法中spring会委托事件广播器发布事件。 | ||
25 | - 事件广播器会遍历注册的每个监听器,并启动来调用每个监听器的onApplicationEvent方法进行事件的处理。 | ||
26 | - 由于默认事件广播器SimpleApplicationEventMulticaster的taskExecutor的实现类是SyncTaskExecutor,因此,事件监听器对事件的处理,是同步进行的。 | ||
27 | - 要等所有监听器处理完事件才能返回。如果想用异步的,可以自己实现ApplicationEventMulticaster接口,并在Spring容器中注册id为 ##applicationEventMulticaster## 的Bean。 | ||
28 | - Spring发布一个事件之后,所有注册的事件监听器,都会收到该事件,因此,事件监听器在处理事件时,需要先判断该事件是否是自己关心的。 | 23 | +只要是实现了ApplicationEventPublisherAware接口的bean,spring会将事件发布者实际就是ApplicationContext设置到该bean中。 |
24 | +要发布事件就调用ApplicationEventPublisher的publishEvent方法,在该方法中spring会委托事件广播器发布事件。 | ||
25 | +事件广播器会遍历注册的每个监听器,并启动来调用每个监听器的onApplicationEvent方法进行事件的处理。 | ||
26 | +由于默认事件广播器SimpleApplicationEventMulticaster的taskExecutor的实现类是SyncTaskExecutor,因此,事件监听器对事件的处理,是同步进行的。 | ||
27 | +要等所有监听器处理完事件才能返回。如果想用异步的,可以自己实现ApplicationEventMulticaster接口,并在Spring容器中注册id为 **applicationEventMulticaster** 的Bean。 | ||
28 | +Spring发布一个事件之后,所有注册的事件监听器,都会收到该事件,因此,事件监听器在处理事件时,需要先判断该事件是否是自己关心的。 | ||
29 | 29 | ||
30 | -### 2.yohobuy的实现 | 30 | +### 2.yoho.core的实现 |
31 | - 定义CommonEvent,扩展自ApplicationEvent增加了name属性,在com.yoho.error.event包中。 | 31 | - 定义CommonEvent,扩展自ApplicationEvent增加了name属性,在com.yoho.error.event包中。 |
32 | - 定义了各个具体事件(DatabaseAccessEvent、GatewayAccessEvent、ServiceCallEvent等)都继承自CommonEvent。 | 32 | - 定义了各个具体事件(DatabaseAccessEvent、GatewayAccessEvent、ServiceCallEvent等)都继承自CommonEvent。 |
33 | - 定义抽象类AbstractEventHandler并实现ApplicationListener接口的onApplicationEvent方法进行各事件的公共处理。 | 33 | - 定义抽象类AbstractEventHandler并实现ApplicationListener接口的onApplicationEvent方法进行各事件的公共处理。 |
34 | - 针对各个事件定义对应的事件监听器(DatabaseAccessEventHandler、GatewayAccessEventHandler等)都继承自AbstractEventHandler。 | 34 | - 针对各个事件定义对应的事件监听器(DatabaseAccessEventHandler、GatewayAccessEventHandler等)都继承自AbstractEventHandler。 |
35 | - 各个需要发布事件的bean实现ApplicationEventPublisherAware接口,调用ApplicationEventPublisher.publishEvent()发布事件。 | 35 | - 各个需要发布事件的bean实现ApplicationEventPublisherAware接口,调用ApplicationEventPublisher.publishEvent()发布事件。 |
36 | -- 由于是异步的,所以要实现ApplicationEventMulticaster接口,故在spring-core-alarm.xml中定义了如下bean,id必须是##applicationEventMulticaster##: | 36 | +- 由于是异步的,所以要实现ApplicationEventMulticaster接口,故在spring-core-alarm.xml中定义了如下bean,id必须是**applicationEventMulticaster**: |
37 | 37 | ||
38 | ```xml | 38 | ```xml |
39 | <!--支持异步的事件--> | 39 | <!--支持异步的事件--> |
-
Please register or login to post a comment