spring 事件监听
用一個簡單的例子來實現spring事件監聽的功能
?
這個例子主要功能是,記錄那些用戶是第一次登入系統,如果用戶是第一次登入系統,則調用spring的事件監聽,記錄這些用戶。
?
主要用到的spring的類和接口有:
?? org.springframework.context.event.ApplicationEvent抽象類及其子類來實現事件;
?? org.springframework.context.ApplicationListener接口及其實現者實現事件的監聽。
?? 這兩者構成了觀察者模式(Observer)。
?
?通過org.springframework.context.ApplicationContextAware接口的實現類,可以取得ApplicationContext, AlicationContext提供了publishEvent方法,實現事件的發布。
?
下面讓我們來看下實現代碼:
?
1 自定義事件 繼承ApplicationEvent抽象類
???ApplicationEvent 她繼承自java.util.EventObject,其中僅僅創建了一個構造器ApplicationEvent,和一個取得當前系統事件的timestamp
?
???public class FirstLoginUserEvent extends ApplicationEvent{
?
?????????? private?String loginName;
??
?????????? public?FirstLoginUserEvent(Object source){
??????????????? super(source);
?????????? }
?
?????????? public FirstLoginUserEvent(Object source, String loginName){
??????????????? super(source);
??????????????? this.loginName=loginName;
??????????????? System.out.println(super.getTimestamp());
??????????????? System.out.println(loginName);???????????????
?????????? }
?
?????????? public String getLoginName(){
???????????????? return loginName;
?????????? }
?
?????????? public void setLoginName(String loginName){
???????????????? this.loginName=loginName;
?????????? }
???}
?
?
?2?定義監聽器 繼承ApplicationListener接口
?
??? @Service("firstLoginUserListener ")
??? public class FirstLoginUserListener implements ApplicationListener{
?????????
?????????? private static Log log = LogFactory.getLog(FirstLoginUserListener.class);
?
???????????public void onApplicationEvent(ApplicationEvent event) {
????????????????? if (event instanceof?FirstLoginUserEvent){
???????????????????????? FirstLoginUserEvent? firstLoginUserEvent=(FirstLoginUserEvent)
???????????????????????? log.debug("用戶:"+firstLoginUserEvent.getLoginName()+"第一次登入");
??????????????????}else{
???????????????????????? log.debug("其它事件");
?????????????????? }
?????????? }?????
???? }
?
?3 發布事件
???
??? @Service("userService ")
??? public class UserService implements ApplicationContextAware {
??????????
??????????private ApplicationContext applicationContext;
?
????????? public void setApplicationContext (ApplicationContext applicationContext){
???????????????? this.applicationContext=applicationContext;
????????? }
?
??????????public void decideUser(int num,String loginName){
?????????????? if (num==0){ //用戶第一次登入,發布事件
????????????????????? applicationContext.publishEvent(new FirstLoginUserEvent(this,loginName));
?????????????? }else{
????????????????????? .......
?????????????? }
??????????}
??? }
?
當我們發布事件的時候,我們的監聽器就會對這個事件進行監聽。
在有些情況下,比如記錄某個特殊操作的日志,可以用spring的事件監聽來記錄日志,也可以用spring的AOP來做,那么它們之間有什么區別呢? spring事件監聽,是以異步方式來操作的,而AOP是同步的。這兩種方式那個好呢?就得具體情況具體分析了。
總結
以上是生活随笔為你收集整理的spring 事件监听的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uml类图2
- 下一篇: window系统查看端口被哪个进程占用了