博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ApplicationListener与ApplicationContext的结合使用
阅读量:5884 次
发布时间:2019-06-19

本文共 3550 字,大约阅读时间需要 11 分钟。

hot3.png

package com.frank.demo@Componentpublic class RegisterService {	protected ApplicationContext getContext() {        	return SpringSingletonUtil.getInstance().getApplicationContext();    	}	public LoginResult afterRegisterSuccess(int userId, String username, int usernameType, DeviceAdapt deviceAdapt) {        // 发布注册成功事件        RegisterSuccessEvent event = new RegisterSuccessEvent(this);        event.setUserId(userId);        if (usernameType == UsernameUtils.USERNAME_TYPE_MOBILE) {            username = "" + UsernameUtils.getMobile(username);// 返回普通手机号        }        event.setUsername(username);        event.setUsernameType(usernameType);        getContext().publishEvent(event);        deviceAdapt.setUserId(userId);        // 记录注册设备信息        registerInfoHome.recordDeviceInfo(deviceAdapt);        return loginService.loginAndRecord(deviceAdapt);    }}

RegisterService 代码如上

ApplicationContext的获取

package com.frank.demoimport org.springframework.beans.factory.BeanFactoryUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Component;/** * 协助实现spring单例模式,此类主要用于持有ApplicationContext引用 * @author  */@Componentpublic class SpringSingletonUtil {	private static SpringSingletonUtil instance;	@Autowired	private ApplicationContext context;	private SpringSingletonUtil() {		instance = this;	}	@SuppressWarnings("unchecked")	public static 
T getBean(Class
cls) { return (T)BeanFactoryUtils.beanOfType(instance.context, cls); } public static ApplicationContext getApplicationContext() { return instance.context; } /** * 单例模式 * @return * * @deprecated getBean(Class) */ public static SpringSingletonUtil getInstance() { return instance; }}
Listener

package com.frank.demoimport org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;/** *  * 
 * 账户注册成功监听器 * 
*/@Componentpublic class RegisterSuccessListener implements ApplicationListener { private static Logger logger = LoggerFactory.getLogger(RegisterSuccessListener.class); @Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof RegisterSuccessEvent) { // Do something. } }}
Event

package com.frank.demo;import org.springframework.context.ApplicationEvent;/** *  *
 *	注册成功事件 *
*/public class RegisterSuccessEvent extends ApplicationEvent { private static final long serialVersionUID = 1L; private int userId; private String username; private int type; /** * 登录名类型:1为手机号,2为邮箱地址 */ public int getType() { return type; } public void setUsernameType(int type) { this.type = type; } public RegisterSuccessEvent(Object source) { super(source); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } @Override public String toString() { final StringBuilder sb = new StringBuilder("RegisterSuccessEvent{"); sb.append("userId=").append(userId); sb.append(", username='").append(username).append('\''); sb.append(", type=").append(type); sb.append('}'); return sb.toString(); }}
 
此项目使用了Spring的ApplicationListener的publish和lisener机制。  并且做了一个ApplicationContext的单例操作。 非常巧妙,使用了事件机制来实现应用功能。

转载于:https://my.oschina.net/u/3051910/blog/988777

你可能感兴趣的文章
ORACLE---Unit04: SQL(高级查询)
查看>>
贪食蛇
查看>>
201521123009 《Java程序设计》第11周学习总结
查看>>
Python3之多线程学习
查看>>
MVC和MTV结构分析
查看>>
(转)微信网页扫码登录的实现
查看>>
mariadb启动报错:[ERROR] Can't start server : Bind on unix socket: Permission denied
查看>>
nginx的信号量
查看>>
云im php,网易云IM
查看>>
河南农业大学c语言平时作业答案,河南农业大学2004-2005学年第二学期《C语言程序设计》期末考试试卷(2份,有答案)...
查看>>
c语言打开alist文件,C语言 文件的打开与关闭详解及示例代码
查看>>
c语言 中的共用体和结构体如何联合定义,结构体(Struct)、联合体(Union)和位域
查看>>
SDL如何嵌入到QT中?!
查看>>
P1026 统计单词个数
查看>>
[js高手之路] html5 canvas系列教程 - 状态详解(save与restore)
查看>>
poi excel 常用api
查看>>
AD提高动态的方法(附SNR计算)
查看>>
[转]轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统
查看>>
五 数组
查看>>
也谈跨域数据交互解决方案
查看>>