SpringBoot自定义注解与注解功能实现
- maven依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
- 注解解释
- @Retention 注解的生命周期;
- @Target运用坐标
- @Documented 记录在java文档中
- @Order 优先级,有默认属性,可以不加
- @Aspect 切面标识
- @Component 被spring管理的组件
- 自定义注解
package com.config.log;
import org.springframework.core.annotation.Order;
import java.lang.annotation.*;
@Retention( RetentionPolicy.RUNTIME )//运行时策略 , 注解的生命周期,表示注解会被保留到什么阶段,可以选择编译阶段、类加载阶段,或运行阶段
@Target(ElementType.METHOD)//坐标 (Target:目标,ElementType.METHOD:元素类型->方法<METHOD>)
@Documented//记录,注解信息会被添加到Java文档中
@Order//优先级
public @interface LogAnnotation {
/**
* 日志输出默认内容
*/
String msg() default "这里要输出点什么";
/**
* x 没有默认值 , 没有默认值的属性在启用注解时,必须为其赋值
*/
String x() ;
public enum Box{A,B,C,D,E};
Box box() default Box.B;//枚举限定值
String[] Names()default {};
String[] BNames()default {"张三"};
}
- 注解功能实现
package com.config.log;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LogInterceptor {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Before( "@annotation(log)" )
public void beforeLog (final JoinPoint jp, LogAnnotation log){
Object[] args = jp.getArgs();//获取所有参数
for (int i = 0; i < args.length; i++) {
System.out.println( args[i] );
}
logger.info(log.msg());
}
}
- 注解使用
@LogAnnotation(msg = "/getJSONpojo",box = LogAnnotation.Box.D,Names = {"李四","网二"},x = "不给值就报错")
@ApiOperation(value = "jSON参数获取", notes = "jSON参数获取" )
@GetMapping(value = "/getJSONpojo")
public String getJSONpojo (
HttpServletRequest request,
@RequestBody Map map
){
System.out.println(map.toString());
JSONObject jsonObject = new JSONObject();
jsonObject.put( "data",map );
return jsonObject.toJSONString();
}
- 测试结果
随笔记录,方便学习
2020-05-27