AOP
*概念:面向切面编程
OOP:面向对象编程
*作用:在不惊动原始设计的基础上为其进行功能增强
*spring理念:无侵入式编程
*核心概念:
AOP的入门案例:
1.导入坐标
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.25</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
2.制作连接点方法
3.制作共性功能
4.定义切入点
package org.example.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class aop_01 {
@Pointcut("execution(void org.example.book.book.update())")//切入点方法
private void pt(){}
@Before("pt()")
public void method(){//连接点方法
System.out.println(System.currentTimeMillis());//共性功能
}
}
5.绑定切入点与通知关系
package org.example.spring;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;
@Configuration
@ComponentScan("org.example")
@EnableAspectJAutoProxy//识别@Aspect 绑定关系
public class SpringConfig {
}
AOP核心概念:
*目标对象:原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成工作的。
*代理:目标对象无法完成的工作,需要对其进行功能回填,通过原始对象的代理对象实现。
AOP切入点表达式:
切入点:要进行增强的方法
切入点表达式:要进行增强的方法的描述方式
标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数))
访问修饰符:可以省略
通配符:
AOP的通知类型:
@Before:前面
@After:后面
@Around:环绕
@AfterReturning:正常运行完
@AfterThrowing:抛出异常后执行
AOP通知获取数据: