javaSE的自定事件发布:说有的自定义事件类型可以通过拓展EventObject来实现,而事件的监听器则拓展自EventListener。
eg:自定义事件类继承EventObject的MethodExecutionEvent
MethodExecutionEvent serialVersionUID = 1L .methodName = .methodName =
定义事件监听接口MethodExecutionEventListener继承自EventListener
MethodExecutionEventListener
MethodExecutionEventListener的实现类:
SimpleMethodExecutionEventListener String methodName ="start to ececute the method[" + methodName + "]." String methodName ="finished to execute the method [" ++ "]."
事件发布MethodExecutionEventPublisher:
List<MethodExecutionEventListener> listeners = ArrayList<MethodExecutionEventListener> = MethodExecutionEvent("methodToMonitor"0"this is what i want to do "1 publishEvent(<MethodExecutionEventListener> copyListeners = ArrayList<MethodExecutionEventListener> (status == 0 ( =
上面是javaSE原生的事件监听类。spring的容器内事件发布类允许以context.applicationEvent的形式的事件。容器内注册的context.applicationListener类型的bean定义会被ApplicationContext容器自动识别它们负责监听容器内发布的说有ApplicationEvent事件。
ApplicationEvent:它是一个抽象类,根据不同的情况提供不同的实现。
1.ContextClosedEvent:在ApplicationContext容器咋即将关闭的时候发布的事件类型。
2.ContextRefreshedEvent:在ApplicationContext容器在初始化或者刷新的时候发布的事件类型。
3.RequestHandledEvent:Web请求处理后发布的事件,有一子类ServletRequestHandledEvent提供特定于JavaEE的servlet事件
4.ContextStoppedEvent。
ApplicationListener:使用的自定义事件监听器接口定义,当容器启动时,会自动是被和加载EventListener类型bean定义,一旦容器有事件发布,将通知这些注册到容器的EventListener。
ApplicationContext容器的具体实现类在实现事件发布和事件监听器的注册方面,交给一个称作ApplicationEventMulticaster的接口,这个接口有一个抽象实现类,context.event.AbstractApplcationMulticaster.事件发布功能交给其子类SimpleApplicationEventMulticaster。
....................................................................
1.ApplicationEventPublisherAware接口。
2.ApplicationContextAware接口。
下面是对上面原生的自定义事件处理进行的改造:
事件类:ApplicationContextMethodExecutionEvent
ApplicationContextMethodExecutionEvent serialVersionUID = 1L ApplicationContextMethodExecutionEvent(Object source ,String methodName,.methodName =.status = .methodName = setStatus(.status =
监听器类:ApplicationContextMethodExecutionEventListener
ApplicationContextMethodExecutionEventListener (evt "applicationEvent log : want to do something"
发布器类:ApplicationContextMethodExecutionEventPublisher
ApplicationContextMethodExecutionEventPublisher = ,"methodToMoniter",0"this is what i want to do"= ,"methodToMoniter",1 .eventPublisher =
通过xml为其注入容器
主程序:
= ClassPathXmlApplicationContext("classpath:config-example8.xml"=