欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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.需要打注解的方法,那个方法会影响待办事项的个数,按个方法就打上注解就完事。

springboot集成websocket通过自定义注解+切面实现实时消息提醒

 

4.到此大功告成,感谢自己能够用文章记录自己的成长。