使用AOP实现自定义的日志注解
最近在学习反射和注解的使用,以及AOP思想,觉得自定义注解挺好玩的,在此记录一下学习经验
1.自定义注解
2.自定义AOP切面
3.使用自定义注解
自定义注解
//配置注解的使用范围,可以是数组类型
//这里配置的METHOD是表示可以使用再方法上,具体可以查看ElementType类
@Target(ElementType.METHOD)
//配置注解的有效期 RUNTIME表示运行期时有效
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLogger {
String value() default "";
}
自定义AOP切面
需要引入spring的aop包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
/**
* 自定义注解切面类
*/
//Aspect定义为切面类
@Aspect
//注入spring中
@Component
public class CustomAnnotationAspect {
Logger logger = LoggerFactory.getLogger(CustomAnnotationAspect.class);
// 配置植入点 @annotation中配置注解类
@Pointcut("@annotation(com.wzzx.basic.component.annotation.MyLogger)")
public void MyLoggerAspect(){};
// 环绕通知 另外还有@Before @After
@Around("MyLoggerAspect()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
//获取类名
String className = joinPoint.getTarget().getClass().getName();
// 获取方法名
String methodName = joinPoint.getSignature().getName();
// 获取入参
Object [] array = joinPoint.getArgs();
ObjectMapper objectMapper = new ObjectMapper();
logger.info("调用前:"+className+":"+methodName+";入参:"+objectMapper.writeValueAsString(array));
//调用方法,并获取返回值
Object object=joinPoint.proceed();
logger.info("调用后:"+className+":"+methodName+";返回值:"+objectMapper.writeValueAsString(object));
return object;
}
}
使用自定义注解
在方法上加上注解即可
查看后台打印输入的日志