什么是AOP(Aspect Oriented Programming)
AOP(Aspect Orient Programming)是面向切面编程,作为面向对象编程的一种补充,已经成为一种比较成熟的编程方式。面向切面编程将程序运行过程分解成各个切面;AOP专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在JavaEE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等
AOP的核心思想是:将很多业务都要使用的功能进行抽取,在运行业务时; 再动态的植入这些抽取的代码。(将共性业务和核心业务分离).AOP实现了共性功能和核心功能的解耦;提高了共性功能的代码的复用率
AOP和OOP互为补充,面向切面编程将程序运行过程分解成各个切面
值得注意的是:AOP是一种设计思想,与具体的技术无关。
AOP基础概念
a、切面(Aspect):是一个类,是对横切关注点的抽象;切面用于组织多个Advice,Advice放在切面中定义。
b、连接点(JoinPoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出。在Spring AOP中,连接点总是方法的调用。
c、切入点(Pointcut):匹配连接点的拦截规则。AOP的核心;可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。
d、通知(Advice):在切面上拦截到某个特定的连接点之后执行的动作
e、目标对象(Target Objcet):被一个或多个切面所通知的对象,即业务中需要进行增强的业务对象
f、织入(Weaving):将切面作用到目标对象上,然后产生一个代理对象的过程
g、引入(Introduction):用来在运行时给一个类声明额外的方法或属性,即不需要为类实现一个接口 就能使用接口中的方法。
Spring实现AOP
导入所需的jar包:
<!--spring AOP的包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
基于CGLIB动态代理实现的AOP
在这里;创建Dog、Fish实例;他们都有同一个放法eatFood();在这里以时间为切入点做示例
package com.aop;
/**
* @author Una
* @date 2022/8/11 17:34
* @description:
*/
public class Fish {
public void eatFood(){
System.out.println("开始吃鱼食!!!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("吃完了鱼食!!!");
}
}
package com.aop;
/**
* @author Una
* @date 2022/8/11 17:37
* @description:
*/
public class D