首页 > 其他分享 >Spring AOP原理

Spring AOP原理

时间:2024-11-20 14:18:07浏览次数:3  
标签:JDK 对象 Spring 代理 接口 实现 AOP 原理 动态

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

软件测试专栏:软件测试

关注博主带你了解更多知识

 

目录

前言: Spring AOP是基于动态代理来实现AOP的

1. 代理模式

代理模式的主要角色 

代理模式的类型

动态代理

JDK动态代理

JDK动态代理的工作原理

JDK动态代理的特点

CGLIB动态代理 

总结:


前言: Spring AOP是基于动态代理来实现AOP的

1. 代理模式

定义:为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤

在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对象,⽽代理对象可以在客⼾端和⽬标对象之 间起到中介的作⽤

代理模式的主要角色 

1. Subject: 业务接⼝类.定义了真实对象和代理对象共有的接口,这样代理可以用来代替真实对象可以是抽象类或者接⼝

2. RealSubject: 业务实现类. 定义了代理所代表的真实对象,实现了主题接口,具体的业务执⾏,也就是被代理对象.

3. Proxy: 代理类.RealSubject的代理,包含对真实主题的引用,实现了和真实主题相同的接口,并在内部控制对真实主题的访问。

代理模式的类型

静态代理:由程序员创建代理类或特定⼯具⾃动⽣成源代码再对其编译,在程序运⾏前代理类的 .class ⽂件就已经存在了.

动态代理:在程序运⾏时,通过反射机制动态创建代理类。

动态代理

相⽐于静态代理来说,动态代理更加灵活

JDK动态代理

它不需要代理类和目标类实现相同的接口,而是通过反射机制来实现

JDK动态代理的工作原理

  1. 定义接口:被代理的对象需要实现一个或多个接口。
  2. 实现InvocationHandler:创建一个实现了InvocationHandler接口的类,并在其中定义一个invoke方法,该方法将作为所有代理方法调用的统一入口。
  3. 创建代理对象:使用Proxy.newProxyInstance方法在运行时动态创建代理对象。
  4. 调用代理对象的方法:当代理对象的方法被调用时,InvocationHandlerinvoke方法也会被调用,你可以在这个方法中定义代理逻辑,如日志记录、权限检查等

JDK动态代理的特点

  • 无需实现接口:代理类不需要实现任何接口,所有的代理逻辑都封装在InvocationHandlerinvoke方法中。
  • 动态性:代理对象是在运行时创建的,可以根据需要动态地创建不同的代理对象。
  • 灵活性:可以在invoke方法中定义复杂的逻辑,如权限控制、事务管理等。
  • 限制:只能为接口创建代理,不能为类创建代理
CGLIB动态代理 

JDK动态代理有⼀个最致命的问题是其只能代理实现了接⼝的类

实现原理

CGLIB动态代理通过生成目标类的子类来实现代理,因此它可以代理没有实现接口的普通类。

优缺点 

优点:CGLIB动态代理可以代理没有接口的类,方法调用性能较高,避免了反射调用。

缺点:创建代理类时需要进行字节码操作,性能开销较大,并且需要依赖cglib和ASM库

JDK动态代理:当你的目标对象实现了接口,并且你希望使用一种简单且性能较好的代理机制时,JDK动态代理是一个不错的选择。

CGLIB动态代理:当你需要代理没有实现接口的类,或者需要代理final类时,CGLIB动态代理提供了一个有效的解决方案

总结:

Spring AOP是基于动态代理实现的,有两种⽅式:

1.基本JDK动态代理实现

2.基于CGLIB动态代理实现.

运⾏时使⽤哪种⽅式与项⽬配置和代理的对象有关 

标签:JDK,对象,Spring,代理,接口,实现,AOP,原理,动态
From: https://blog.csdn.net/jj666mhhh/article/details/143830230

相关文章