springboot自定义注解常见的应用就是在自定义记录操作日志、自定义数据字典等操作上面。自定义注解一般是搭配aop使用的。要学习自定义注解
最好先学习springboot面向切面编程
@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上
@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行
@Documented //生成文档
public @interface OpreatorLog {
/**
* 日志描述,没有默认值,使用注解的时候必须给operateDec参数赋值
*/
String operateDec();
/**
* 日志类型,默认值为2
* 1:登录日志;2:操作日志;3:定时任务;
*/
int logType() default 2;
}
创建OperatorLogAspect
,代码如下
@Aspect
@Component
public class OperatorLogAspect {
/**
* 定义切点Pointcut
*/
@Pointcut("execution(public * com.moyundong..*.*Controller.*(..))")
public void excudeService() {
}
/**
*
* @param joinPoint
* @return
* @throws Throwable
*/
@Around("excudeService()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
//从切面织入点处通过反射机制获取织入点处的方法
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//获取切入点所在的方法
Method method = signature.getMethod();
//获取操作,如果有注解,就执行增加日志操作
OpreatorLog myLog = method.getAnnotation(OpreatorLog.class);
if (myLog != null) {
//操作类型
int logType = myLog.logType();
String operateDec = myLog.operateDec();
//获取请求的类名
String className = joinPoint.getTarget().getClass().getName();
//获取请求的方法名
String methodName = method.getName();
System.out.println("logType="+logType);
System.out.println("operateDec="+operateDec);
System.out.println("className="+className);
System.out.println("methodName="+methodName);
// ......
// 做你想做的任何事情
}
return joinPoint.proceed();
}
}
这个知识是我们之前学过的,没学过的请先看springboot面向切面编程
我们创建一个测试类,在类的方法上面加自定义注解@OpreatorLog
,因为operateDec没有默认值,所以必须赋值。logType有默认值,所以可以不输入。
/**
* @Description: 测试类
**/
@RestController
@RequestMapping("test")
public class TestController {
@RequestMapping("add")
@OpreatorLog(operateDec = "这是一个添加任务")
public String add(){
return "添加成功 !";
}
@RequestMapping("edit")
@OpreatorLog(operateDec = "这是一个修改任务")
public String edit(){
return "修改成功 !";
}
@RequestMapping("delete")
@OpreatorLog(operateDec = "这是一个删除任务")
public String delete(){
return "删除成功 !";
}
@RequestMapping("login")
@OpreatorLog(operateDec = "这是一个登录任务",logType = 1)
public String login(){
return "登录成功 !";
}
}
项目启动后,在浏览器输入http://localhost:8088/moyundong/test/login
和http://localhost:8088/moyundong/test/add
会得到如下信息
logType=1
operateDec=这是一个登录任务
className=com.moyundong.controller.TestController
methodName=login
logType=2
operateDec=这是一个添加任务
className=com.moyundong.controller.TestController
methodName=add
::: tip 提示
本节内容只是讲了自定义注解的基本原理,后面我们会讲解springboot基于注解的操作日志
:::
本节示例下载地址:java相关demo下载列表
springboot进阶学习目录
1介绍
2springboot定时任务
3springboot定时任务配置详解
4springboot动态定时任务
5springboot集成websocket
6springboot多数据源
7springboot配置druid监听
8springboot自定义注解
9springboot常见注解详解
10springboot接收参数详解
11springboot验证机制@Valid和@Validated
12springboot集成Swagger2
13springboot集成swagger-bootstrap-ui
14springboot集成shiro
15springboot集成shiro(二)
16springboot集成jwt
17springboot集成ActiveMQ
18springboot缓存机制
欢迎大家来博客了解更多内容:java乐园