Spring AOP学习笔记
Springboot 实现AOP
其实搞明白AOP是什么之后(基于动态代理实现面向切面编程的一种思想),无论在哪里使用都很简单,但是由于最近做的好多项目都使用springboot,所以就在补充一下,超级无敌简单
依赖的包,pom中引入即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
springboot实现AOP有两种方式:一是申明的方式(基于XML),二是注解的方式(基于AspectJ),由于个人喜好只说说注解的方式实现AOP,
一、实现方式一(编写切入点表达式)
@Service
public class LogService {
private final Logger logger = LoggerFactory.getLogger(LogService.class);
public void search(){
logger.info("查询方法被执行");
}
}
@Aspect
@Component
public class LogAspect {
private final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Pointcut("execution(public * com.dafeng.service.LogService.*(..))")//切入点描述 这个是切入点
public void logPointcut(){}//签名,可以理解成这个切入点的一个名称
@Before("logPointcut()") //在切入点的方法执行之前
public void before(JoinPoint joinPoint) {
logger.info("方法执行前。。。");
}
@After("logPointcut()") //在切入点的方法执行之后
public void after(JoinPoint joinPoint) {
logger.info("方法执行后。。。");
}
}
执行结果:
2020-03-01 13:40:38.894 INFO 35973 --- [nio-8080-exec-1] com.dafeng.service.LogAspect : 方法执行前。。。
2020-03-01 13:40:38.903 INFO 35973 --- [nio-8080-exec-1] com.dafeng.service.LogService : 查询方法被执行
2020-03-01 13:40:38.903 INFO 35973 --- [nio-8080-exec-1] com.dafeng.service.LogAspect : 方法执行后。。。
二、 实现方式二(自定义注解)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default "";
}
@Service
public class LogService {
private final Logger logger = LoggerFactory.getLogger(LogService.class);
@Log // 此处添加自定义注解
public void search(){
logger.info("查询方法被执行");
}
}
@Aspect
@Component
public class LogAspect {
private final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Pointcut("@annotation(com.dafeng.annotation.Log)")//切入点描述使用自定义注解 这个是切入点
public void logPointcut(){}//签名,可以理解成这个切入点的一个名称
@Before("logPointcut()") //在切入点的方法执行之前要干的
public void before(JoinPoint joinPoint) {
logger.info("方法执行前。。。");
}
@After("logPointcut()") //在切入点的方法执行之后要干的
public void after(JoinPoint joinPoint) {
logger.info("方法执行后。。。");
}
}
执行结果:
2020-03-01 14:12:35.434 INFO 40304 --- [nio-8080-exec-1] com.dafeng.service.LogAspect : 方法执行前。。。
2020-03-01 14:12:35.441 INFO 40304 --- [nio-8080-exec-1] com.dafeng.service.LogService : 查询方法被执行
2020-03-01 14:12:35.442 INFO 40304 --- [nio-8080-exec-1] com.dafeng.service.LogAspect : 方法执行后。。。