package com.frank.demo @Component public 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 代码如上java
ApplicationContext的获取
spring
package com.frank.demo import 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 */ @Component public class SpringSingletonUtil { private static SpringSingletonUtil instance; @Autowired private 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; } }
package com.frank.demo import 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> */ @Component public class RegisterSuccessListener implements ApplicationListener { private static Logger logger = LoggerFactory.getLogger(RegisterSuccessListener.class); @Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof RegisterSuccessEvent) { // Do something. } } }
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; } @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的单例操做。 很是巧妙,使用了事件机制来实现应用功能。