本篇文章教给大家自定义日志注解功能的实现,主要技术核心是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表示通用响应体。
综上,下面仅展示TestController和LogInfo两个文件的代码。
// 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", "创建成功")

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





