在SERVICE的抽象类中去掉onApplicationEvent方法,不需要了,改写发布事件的方法,修改后变成这样
- import org.springframework.context.ApplicationEvent;
- /**
- * 实现顶层接口的抽象类
- */
- public abstract class AbstractBaseService implements IBaseService {
- /**
- * 发布事件
- */
- protected final void publishEvent(BaseEvent event) {
- //使用自已事件工具类发布事件
- EventController.publishEvent(event);
- }
- /**
- * 默认实现处理事件的方法
- */
- public void onBaseEvent(BaseEvent event) {
- }
- /**
- * 注意虽然也是在顶层接口中都实现了事件监听,但是只有这个方法有返回值时,才真正的会被调用
- */
- public List<Class<? extends BaseEvent>> getEventClasses(){
- return null;
- }
- }
到此框架就完成了,UserServiceImpl删除用户时发布事件的代码还和原来一样,不需要改变,只是监听类要变一下,不再实现ApplicationListener接口,改而实现IBaseEventListener接口,不过不需要再具体类中实现,因为已经在顶层接口中继承了,代码
- public class OtherServiceImpl extends AbstractBaseService {
- private IBaseDAO otherDao;
- /**
- * 重写父类的方法,处理用户删除事件
- */
- protected void onBaseEvent(BaseEvent baseEvent){
- //如果本类只处理一个事件,这里就不需要再类型判断了
- UserDeleteEvent event = (UserDeleteEvent)baseEvent;
- otherDao.deleteOtherData(event.getSource().getId());
- }
- /**
- * 返回本类所要处理所有事件
- */
- public List<Class<? extends BaseEvent>> getEventClasses() {
- List<Class<? extends BaseEvent>> eventClasses = new ArrayList<Class<? extends BaseEvent>>(1);
- //本类只监听用户删除事件
- eventClasses.add(UserDeleteEvent.class);
- return eventClasses;
- }
- }