线程同步消费事件-spring
1.线程消费事件
新建事件监听类(交给spring来管理[email protected] 注入)
2.事件处理总类 NmaeEventController(名称可自定义)实现ApplicationListener 接口
@Component类注入NmaeEventController交spring管理,此类用于注册在java启服时候依赖spring的类.register()方法
3.配置文件 在applicationContext.xml中配置 自动扫描LogEventController类
如果不配置,spring则找不见对应的注册事件.ApplicationContextHolderGm.getBean("xxxDao");获取为null
<context:component-scan base-package="com.game.admin">
<context:include-filter type="annotation"
expression="com.game.admin.eventbus.LogEventController" />
</context:component-scan>
4.写具体的操作参数的封装类,例如日志记录事件,例如(消费购买物品操作事件),此类封装一些需要的参数.(写个静态的实例(需要的参数))
static UserEvent valueOf(SessionInfo info,String content,int isSucc)该类是该消费事件的参数封装类,用于实例化封装参数
5.启服的时候注册对应的NmaeEventController事件总处理类
public abstract class AbstractEventHandler {
@Resource
protected NmaeEventController logEventController;
//启服的时候注册
@PostConstruct
void initialize(){
logEventController.register(this);
}
}
@PostConstruct下initialize初始化注册信息
6.AbstractEventHandler 的子类LogEvents事件 @Subscribe操作具体的购物和业务逻辑
public class LogEvents extends AbstractEventHandler {
@Autowired
private IOperateLogService LogService;
/***
* 每个的操作触发的时候 记录日志
*/
@Subscribe
public void WriteLog(UserEvent event){
system.out.println("event是封装的参数类");
}
}
7.具体的使用
ApplicationContextHolderGm.getBean(NameEventController.class).post(UserEvent.valueOf(getSessionInfo(), log,1));
当有客户需要消费的时候.post你写好的具体事件.用@Subscribe类方法即可轻松实现java后台消费功能,使你的代码性能大大提升.