创建监听器三步骤:
1、事件(event)可以封装和传递监听器中要处理的参数,如对象或字符串,并作为监听器中监听的目标。
2、监听器(listener)具体根据事件发生的业务处理模块,这里可以接收处理事件中封装的对象或字符串。
3、事件发布者(publisher)事件发生的触发者。
代码展示:
pom.xml
org.springframework
spring-aspects
cn.hutool
hutool-all
4.6.8
第一步:
定义一个事件,需要继承spring的ApplicationEvent
package top.xzhand.event;
import org.springframework.context.ApplicationEvent;
/**
* 定义一个事件,需要继承spring的ApplicationEvent
*/
public class LogEvent extends ApplicationEvent {
public LogEvent(Object source) {
super(source);
}
}
第二步:
定义切面,发布事件
@Component
@Aspect
这两个注解必须添加
package top.xzhand.event.aspect;
import com.alibaba.fastjson.JSON;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import top.xzhand.event.LogEvent;
import top.xzhand.po.RequestLog;
import org.aspectj.lang.JoinPoint;
import top.xzhand.util.LogUtil;
import java.util.Date;
/**
* 切面发布
*/
@Component
@Aspect
public class LogAspect {
public static final ThreadLocal THREAD_LOCAL = new ThreadLocal<>();
@Autowired
private ApplicationContext applicationContext;
@Pointcut("@annotation(top.xzhand.event.common.Log)")
public void logAspect() {
}
@Before(value = "logAspect()")
public void before(JoinPoint point) throws Throwable {
RequestLog requestLog = new RequestLog();
requestLog.setCreateAt(new Date());//开始时间
Environment environment = applicationContext.getEnvironment();
String appName = environment.getProperty("spring.application.name");
//sysLog.setCreateName(createName);
THREAD_LOCAL.set(LogUtil.getSysLog(point,requestLog));
System.out.println("进入切面:"+JSON.toJSONString(requestLog));
}
@AfterReturning(returning = "rvt", pointcut = "logAspect()")
<