在SERVICE的抽象类中去掉onApplicationEvent方法,不需要了,改写发布事件的方法,修改后变成这样 

Java代码 
  1. import org.springframework.context.ApplicationEvent;  
  2.   
  3. /** 
  4.  * 实现顶层接口的抽象类 
  5.  */  
  6. public abstract class AbstractBaseService implements IBaseService {  
  7.          /** 
  8.      * 发布事件 
  9.      */  
  10.     protected final void publishEvent(BaseEvent event) {  
  11.         //使用自已事件工具类发布事件  
  12.         EventController.publishEvent(event);  
  13.     }  
  14.   
  15.          /**   
  16.           * 默认实现处理事件的方法  
  17.             */    
  18.          public void onBaseEvent(BaseEvent event) {     
  19.          }  
  20.   
  21.          /** 
  22.      * 注意虽然也是在顶层接口中都实现了事件监听,但是只有这个方法有返回值时,才真正的会被调用 
  23.      */  
  24.     public List<Class<? extends BaseEvent>> getEventClasses(){  
  25.                    return null;  
  26.          }  
  27.   
  28. }  

    到此框架就完成了,UserServiceImpl删除用户时发布事件的代码还和原来一样,不需要改变,只是监听类要变一下,不再实现ApplicationListener接口,改而实现IBaseEventListener接口,不过不需要再具体类中实现,因为已经在顶层接口中继承了,代码 
Java代码 
  1. public class OtherServiceImpl extends AbstractBaseService {  
  2.     private IBaseDAO otherDao;  
  3.   
  4.     /** 
  5.      * 重写父类的方法,处理用户删除事件 
  6.      */  
  7.     protected void onBaseEvent(BaseEvent baseEvent){  
  8.                   //如果本类只处理一个事件,这里就不需要再类型判断了  
  9.                   UserDeleteEvent event = (UserDeleteEvent)baseEvent;  
  10.         otherDao.deleteOtherData(event.getSource().getId());  
  11.     }  
  12.            
  13.          /** 
  14.      * 返回本类所要处理所有事件 
  15.      */  
  16.     public List<Class<? extends BaseEvent>> getEventClasses() {  
  17.         List<Class<? extends BaseEvent>> eventClasses = new ArrayList<Class<? extends BaseEvent>>(1);  
  18.         //本类只监听用户删除事件  
  19.         eventClasses.add(UserDeleteEvent.class);  
  20.         return eventClasses;  
  21.     }  
  22. }