springboot集成websocket通过自定义注解+切面实现实时消息提醒
程序员文章站
2024-03-15 14:28:35
...
上一篇文章介绍springboot如何集成websocket,而我们的需求是当上一个人审核通过了下一个人能实时的收到提醒。所有还需要进一步的升级,实现思路:①在上一个人审核操作的方法上打上一个aop拦截的自定义注解②在aop中执行发送消息操作
1.自定义注解
/**
* (描述该文件)
* @author tlj
* @date 2018年9月15日 上午10:37:31
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface UserMessage {
}
2.aop类,UserMessageSocket 是上一篇文章中的服务器消息处理类
/**
* (消息提醒的切面)
* @author tlj
* @date 2018年9月14日 上午10:41:31
*/
@Aspect
@Component
public class MessageAop {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
UserMessageSocket userMessageSocket;
/**
* 切点
*/
@Pointcut(value = "@annotation(com.dechy.mis.core.common.annotion.UserMessage)")
public void cutService() {
}
/**
* 通知
* @param point
* @return
* @throws Throwable
*/
@Around("cutService()")
public Object getUserMessage(ProceedingJoinPoint point) throws Throwable {
//1.先执行业务
Object result = point.proceed();
try {
//2.执行aop方法
handle(point);
} catch (Exception e) {
log.error("执行消息提醒切面异常");
}
return result;
}
private void handle(ProceedingJoinPoint point) throws Exception {
//1.获取拦截的方法名
Signature sig = point.getSignature();
if (!(sig instanceof MethodSignature)) {
throw new IllegalArgumentException("该注解只能用于方法");
}
//2.发送消息
userMessageSocket.sendInfo();
}
}
3.需要打注解的方法,那个方法会影响待办事项的个数,按个方法就打上注解就完事。
4.到此大功告成,感谢自己能够用文章记录自己的成长。