全站的自我修养 ———— Spring通过Aop存储操作记录到数据库

Aop存储操作记录到数据库是一个项目中管理员权限必备的要求,以便管理员查看用户操作,今天就让小编带大家完成这个功能

一、通过注解来标记对应Service

关于自定义注解类具体如何操作,请看小编的这边文章

这里小编创建了一个注解类,里面定义了两个属性
在这里插入图片描述

1、用的时候只能用在Service层上面
2、message是记录时传递的数据
3、type是传递内容的类型
这里可以根据自己的需求随意更改!!

在这里插入图片描述

二、定义Diary的props

在这里插入图片描述

三、定义记录数据的Mapper和xml

在这里插入图片描述
在这里插入图片描述

三、Aop切面内容编写

@Slf4j
@Component
public class AopController {
    @Autowired
    private DiaryMapper diaryMapper;

    @Pointcut("@annotation(com.example.spring.mapper.DiaryNote)")
    public void DiaryMapper() {
    }

    /**
     * 返回通知切面方法
     *
     * @param joinPoint 切点,就是被注解的目标方法
     * @param result    切点方法返回体
     */
    @AfterReturning(pointcut = "DiaryMapper()", returning = "result")
    public void logPostMapping(JoinPoint joinPoint, Object result) {
        log.info("=====================================================logStart========================================================");
        // 声明一个返回类型
        Diary diary = new Diary("", "", LocalDateTime.now(), "", 0, "", 0);

        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();

        // 一个注解内部信息的对象
        DiaryNote redis = (DiaryNote) method.getAnnotation(DiaryNote.class);
        // 这里的redis就是注解类的内部属性

        // Service接受的对象
        Object[] objects = joinPoint.getArgs();
        // 具体保存
        SaveDiary(redis.type(), diary, objects[0], result);

        log.info("========================================================logEnd========================================================");
    }

    public void SaveDiary(String type, Diary diary, Object objects, Object returnObject) {
     		// 这里是通过注解类里买呢type属性来执行对应的Dialog操作,
     		// 如果大家的数据记录没那么多要求,可以自己大改成很简单的逻辑
            if (type.equals("登陆")) {
            
            // 将传输过来的数据强转为对应Service对象类型
                User user = (User) objects;
                
                // 这里的returnMessage是对应的Service所return的参数
                User returnMessage = (User) returnObject;
                
				// 这里给diary设置各种属性存到数据库
                    diary.setDiaryType(type);
                    diary.setUsername(user.getUsername());
                    diary.setUserType(returnMessage.getUserType());
        			diary.setMessage(redis.message());
                }
            } else if (type.equals("其他type....")){
            ........
            }
            
             // 最后使用Mapper里的方法来存储到数据库
             diaryMapper.saveOperateDiary(diary);

四、展示小编的成果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值