SprignAOP--动态代理
动态代理模型
代理类$Proxy类用于增强UserImpl类的work()方法
AOP术语
1、 目标类target:就是我们需要增强的那个类 如:UserImpl.class
2、 代理类proxy:就是自定义的代理的对象 如:$Proxy.class
3、 连接点joinPoint:程序执行的某个特定位置,Spring仅支持方法的连接点
如: UserImpl类中的所有方法(相当于候选人)
4、 切入点pointCut:就是在目标类中实际增强的方法
如:work()方法(获奖者)
5、 织入weave:就是将代理类中需要增强的方法放入到目标类中去执行的过程
将原方法与其他类的方法一起调用
6、 引介Introduction:引介是一种特殊的增强,它为类添加一些属性和方法(课程不使用)
7、 通知advice:将代理对象中的方法应用到目标类的过程中产生的结果。
8、 切面aspect:所有的切入点和代理对象的方法组成在一起 构成了切面
AOP准备
pom.xml添加依赖导入jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
</dependencies>
IUser
//1 必须要有一个接口
public interface IUser {
void work();
}
UserImpl
//2 类与接口是实现关系
public class UserImpl implements IUser {
//连接点
//切点
@Override
public void work() {
System.out.println("做自己喜欢的事情");
}
//连接点
@Override
public void play() {
System.out.println("玩的时候好好玩");
}
}
Advice
public class Advice {
public void writeLog(){
System.out.println("正经人谁写日记");
}
}
UserImplTest
public class UserImplTest {
@Autowired
IUser iUser;
@Test
public void work() {
System.out.println(iUser);
iUser.work();