ApplicationListener与ApplicationContext的结合使用
来源:互联网 发布:淘宝代销协议书 编辑:程序博客网 时间:2024/06/05 14:47
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;@Autowiredprivate ApplicationContext context;private SpringSingletonUtil() {instance = this;}@SuppressWarnings("unchecked")public static <T> T getBean(Class<T> 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;/** * * <pre> * 账户注册成功监听器 * </pre> */@Componentpublic class RegisterSuccessListener implements ApplicationListener {private static Logger logger = LoggerFactory.getLogger(RegisterSuccessListener.class);@Overridepublic void onApplicationEvent(ApplicationEvent event) {if (event instanceof RegisterSuccessEvent) {// Do something.}}}
Event
package com.frank.demo;import org.springframework.context.ApplicationEvent;/** * *<pre> *注册成功事件 *</pre> */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;}@Overridepublic 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的单例操作。 非常巧妙,使用了事件机制来实现应用功能。
阅读全文
0 0
- ApplicationListener与ApplicationContext的结合使用
- Spring ApplicationContext事件机制:ApplicationEvent与ApplicationListener
- ApplicationEvent 与 ApplicationListener 的使用 及 思考
- Spring中使用ApplicationContext进行事件的监听之ApplicationEvent,ApplicationListener
- ApplicationEvent和ApplicationListener的使用
- spring中ApplicationContext的获取与使用
- 使用JDBCTemplate实现与Spring结合,方法公用 ——Spring配置(applicationContext.xml)
- Spring的ApplicationListener及Spring容器事件使用实例
- BeanFectory与AppliCationContext 的
- spring核心类极其作用:ApplicationContext,BeanWrapper,BeanFactory,ApplicationListener,InitializingBean
- spring的ApplicationContext 与 struts
- BeanFactory与ApplicationContext的区别
- BeanFactory与ApplicationContext的区别
- beanfactory与applicationcontext的区别
- BeanFactory与ApplicationContext的区别
- BeanFactory 与 ApplicationContext的不同
- BeanFactory与ApplicationContext的比较
- Spring 的 ApplicationEvent and ApplicationListener
- 23中设计模式之组合模式
- Activiti工作流引擎的使用
- Git之diff和status
- 革新时代的神器
- rocketmq结构图讲解
- ApplicationListener与ApplicationContext的结合使用
- (搬运).net起步 (用配置文件属性维护网站用户信息 3)
- 关于设置jQuery的animate动画没有显示效果的问题
- 正则判断小数/中文/数字/电话格式以及邮件地址是否合法
- c语言文件读取 学生成绩管理系统的设计与实现
- Android Log 分类
- 牛客网2014.06.14Java试题
- JSR-303校验类型大全
- 淘淘商城系列——单点登录之用户登录页面实现