AOP思想概念
连接点(所有待增强的的方法,未确定的)JoinPoint
切入点(需要增强的方法,确定的)Pointut
通知(增强的功能)Advice
通知类(存放通知的类)
切面(通知和切入点的对应关系)Aspect
AOP实现
maven依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.21</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.9.1</version>
<scope>runtime</scope>
</dependency>
案例:在不动Test类的test()方法之前加入当前系统时间
源类:Test.class
public class Test {
//连接点
public void test() {
System.out.println("测试AOP");
}
}
通知类MyAdvice.class:
@Component
@Aspect
public class MyAdvice {
//切入点
@Pointcut("execution(void com.codehorse.Test.test())") //切入点表达式
private void pt(){};
//在切入点之前执行输出当前系统时间
@Before("pt()")
public void BefoerTime() { //通知
System.out.println(System.currentTimeMillis());
}
}
spring配置类springConfig.class
@Component
@Aspect
@Configuration
@ComponentScan("com.codehorse")
@EnableAspectJAutoProxy
public class SpringConfig {
}
运行结果:
AOP思想步骤:
- 在不动原来的代码之上你到底想干嘛
- 定义通知(放到通知类中)
- 找到连接点(不动的原代码)
- 定义切入点(需要匹配到连接点)
- 切面(切入点需要放到连接点的哪个位置)