aop切面监听类中的方法(如 增删改查)
1、创建一个自定义注解来标记监听的方法
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UserAnnotation {
}
2、创建一个监听类用来监听方法
注意注解
@Aspect
@Component
@Order(1)
@Slf4j
public class UserListener {
// 定义一个切面,括号内写入自定义注解的路径,被该注解标注的方法,将走此处的增强方法。
@Pointcut("@annotation(com.server.system.utils.annotation.UserAnnotation)")
private void actionRecordCheck() {
}
3、对于注解标记的方法使用 after,before,around自行判断。例如
对类中的增删改方法监听
@After("actionRecordCheck()")
// @AfterReturning(value = "actionRecordCheck()", returning = "result")
public void afterAdvice(JoinPoint joinPoint) {
/*public void afterReturn(JoinPoint joinPoint, Objects result) {*/
ThreadLocal<Login> localUser = WebInterceptor.localUser;
Login login = localUser.get();
String loginUsername = login.getUsername();
QueryWrapper<UserEntity> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("username", loginUsername);
userQueryWrapper.eq("del_flag", 0);
UserEntity userEntity = userMapper.selectOne(userQueryWrapper);
String realname = userEntity.getRealname();
//获取入参
Object[] args = joinPoint.getArgs();
String pageType = "用户管理页面";//页面路由
String action = "";//操作
//获取方法名
String name = joinPoint.getSignature().getName();
if (name.equals("saveUser")) {
//添加
action = "添加";
}
if (name.equals("delete")) {
//删除
action = "删除";
}
if (name.equals("updateUserxx")) {
//更新
action = "编辑";
}
//对入参进行处理
if (ArrayUtils.isNotEmpty(args)) {
//入参为对象
UserEntity user = (UserEntity) Arrays.stream(args).filter(UserEntity.class::isInstance).collect(Collectors.toList()).get(0);
String userRealname = user.getRealname();//获取创建用户的姓名
}
for (Object arg : args) {
//String类型或者Integer等包装类,需要对入参数组进行重新赋值
if (arg instanceof UserEntity) {
String userRealName = ((UserEntity) arg).getRealname();//获取创建用户的姓名
UserCodeRecord userCodeRecord = new UserCodeRecord();
userCodeRecord.setUsername(loginUsername);
userCodeRecord.setRealName(realname);
// userCodeRecord.setPageType(pageType);
Date date = new Date();
userCodeRecord.setUpdateTime(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(date);
userCodeRecord.setUpdateContent(realname + "在" + format + "在" + pageType + action + "用户名为" + userRealName + "的用户信息");
userCodeRecordMapper.insert(userCodeRecord);
}
}