自定义日志注解Log实现 - SpringAop的实际应用

本文介绍了如何利用Spring-AOP实现自定义日志注解功能,通过在业务方法上添加注解来记录日志,包括请求URL、方法名、请求类型等关键信息。示例展示了从创建注解、切面处理到功能测试的完整过程。

本篇文章教给大家自定义日志注解功能的实现,主要技术核心是Spring-AOP。

一、AOP回顾

AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。主要作用是分离功能性需求和非功能性需求,使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。简单的说,AOP 的作用就是保证开发者在不修改源代码的前提下,为系统中的业务组件添加某种通用功能。
其核心概念包括JoinPoint、PointCut、Advice、Target、Weaving、Proxy、Aspect,除此之外还有before、after、after-returning、after-throwing、around。

具体详细内容不在此赘述,忘记aop或者不了解aop的可以搜索相关文章进行学习。

二、编写简单业务

因为功能过于简单,本部分只进行简略的代码介绍。

1. 程序结构

在这里插入图片描述

2. 基本代码展示

annotation包下代码在后续内容介绍。

constant包下的BizType即业务功能枚举,不在赘述。

domain包下的MsgVo表示前端传递数据结构,R表示通用响应体。

综上,下面仅展示TestControllerLogInfo两个文件的代码。

// LogInfo.java - 存储日志的结构
package com.darrin.logdemo.domain;

import com.darrin.logdemo.constant.BizType;
import lombok.Data;

@Data
public class LogInfo {
   
   
    // 业务请求地址
    private String url;
    // 业务处理结果 - 业务处理触发catch捕获则为处理失败 应当存放报错信息
    private boolean status;
    // 若业务处理失败 该字段存放报错内容
    private String errorMsg;
    // 业务请求函数名
    private String method;
    // 业务请求的HTTP方法 - GET/PUT/POST/DELETE
    private String requestType;
    // 自定义业务字段
    private BizType bizType;
    // 日志标题
    private String title;
    // 业务方法参数
    private String param;
    // 业务方法执行结果
    private String result;
}
// TestController.java - 简单的增删改查功能
// 利用静态生成的HashMap代替实际业务的数据库db,代替实现增删改查的效果
package com.darrin.logdemo.controller;

import com.darrin.logdemo.constant.BizType;
import com.darrin.logdemo.domain.MsgVo;
import com.darrin.logdemo.domain.R;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;

@RestController
@RequestMapping("/test")
public class TestController {
   
   
    private static HashMap<String, String> data = new HashMap<>();

    static {
   
   
        data.put("admin", "adminPwd");
        data.put("test", "testPwd");
        data.put("darrin", "darrinPwd");
        data.put("language", "Java");
    }

    @PostMapping
    public R test_add(@RequestBody MsgVo msgVo) {
   
   
        String k = msgVo.getKey();
        String v = msgVo.getValue();
        data.put(k, v);
        return R.ocm(null, "200", "创建成功")
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值