spring 自定义事件 处理机制 二
spring 自定义事件 处理机制 2在SERVICE的抽象类中去掉onApplicationEvent方法,不需要了,改写发布事件的方
spring 自定义事件 处理机制 2
在SERVICE的抽象类中去掉onApplicationEvent方法,不需要了,改写发布事件的方法,修改后变成这样?
Java代码?
- 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接口,不过不需要再具体类中实现,因为已经在顶层接口中继承了,代码?
Java代码?
- 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;??
- ????}??
- } ?