广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringAop实现原理及代理模式详解
  • 262
分享到

SpringAop实现原理及代理模式详解

2024-04-02 19:04:59 262人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录spring aop的原理1. jdk动态代理2. CGLIB动态代理3. Spring项目中如何强制使用CGLIB代理方式Spring Aop的原理 Spring的AOP就是通

Spring Aop的原理

Spring的AOP就是通过动态代理实现的。当为某个Bean或者某些Bean配置切面时,Spring会为其创建代理对象,当调用该对象的某个方法时,实际是调用生成的代理类的对象方法。Spring的Aop主要是使用了两个动态代理,分别是JDK的动态代理和CGLIB动态代理。

1. JDK动态代理

如果代理类实现了接口,Spring默认会使用JDK动态代理。JDK的动态代理是基于反射实现。JDK通过反射,生成一个代理类,这个代理类实现了原来那个类的全部接口,并对接口中定义的所有方法进行了代理。当我们通过代理对象执行原来那个类的方法时,代理类底层会通过反射机制,调用我们实现的InvocationHandler接口的invoke方法。


public interface Person {
    void say();
}
 *  接口实现类
public class Man implements Person {
    private String Word;
    public Man(String word){
        this.word = word;
    }
    public Man(){
    public void say(){
        System.out.println("Man Can Say " + word);
public class ManJDKProxy implements InvocationHandler {
    
    private Object o;
    public Object bind(Object o){
        this.o = o;
        return Proxy.newProxyInstance(o.getClass().getClassLoader(), o.getClass().getInterfaces(), this);
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("JDK Proxy Design");
        return method.invoke(o, args);

public interface Person {
    void say();
}
 *  接口实现类
public class Man implements Person {
    private String word;
    public Man(String word){
        this.word = word;
    }
    public Man(){
    public void say(){
        System.out.println("Man Can Say " + word);
public class ManCGLIBProxy {
    public Object bind(Object target){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(target.getClass());
        enhancer.setCallback(new MethodInterceptor() {
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                System.out.println("CGLIB Proxy Design");
                return method.invoke(target, objects);
            }
        });
        return enhancer.create();
/**
 * CGLIB动态代理
public class ProxyDesign_3 {
    public static void main(String[] args) {
        Man man = new Man("Hello");
        Person p = (Person)new ManCGLIBProxy().bind(man);
        p.say();

* CGLiB动态代理的优缺点

优点:
    1. 使用CGLiB代理的类,不需要实现接口,因为CGLib生成的代理类是直接继承自需要被代理的类
    2. 因为CGLiB实现方式是重写父类的方法,所以对final方法,或者private方法是没有办法代理的
    3. CGLiB是通过修改字节码生成的代理类,所以CGLib执行代理方法的效率要高于JDK的动态代理
缺点:
    1. 因为CGLiB实现方式是重写父类的方法,所以对final方法,或者private方法是没有办法代理的
    2. 因为CGLiB生成代理类的方式是通过操作字节码(asm工具包),这种生成的代理类的方式比JDK通过反射生成代理类的方式的效率低

3. Spring项目中如何强制使用CGLIB代理方式

* xml方式

<!-- aop:config用来在xml中配置切面,指定proxy-target-class="true" -->
<aop:config proxy-target-class="true">
	<!-- AOP相关配置 -->
</aop:config>

* @Aspect注解方式

<!-- 将proxy-target-class配置设置为true -->
<aop:aspectj-autoproxy proxy-target-class="true"/>

* 配置类注解方式

添加@EnableAspectJAutoProxy(proxyTargetClass = true)

到此这篇关于SpringAop实现原理及代理模式的文章就介绍到这了,更多相关SpringAop代理模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringAop实现原理及代理模式详解

本文链接: https://www.lsjlt.com/news/144689.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringAop实现原理及代理模式详解
    目录Spring Aop的原理1. JDK动态代理2. CGLIB动态代理3. Spring项目中如何强制使用CGLIB代理方式Spring Aop的原理 Spring的AOP就是通...
    99+
    2022-11-13
  • SpringAop实现原理及代理模式是什么
    这篇文章主要介绍了SpringAop实现原理及代理模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringAop实现原理及代理模式是什么文章都会有所收获,下面我们一起来看看吧。Spring Aop的...
    99+
    2023-06-29
  • SpringAOP的底层实现方式-代理模式
    目录1.1 静态代理1.2 动态代理1.2.1 JDK动态代理(必须有接口)1.2.2 CGlib动态代理在学习Spring的过程中,留下一下痕迹。 代理模式,其实就是让别人做同样的...
    99+
    2022-11-12
  • Java设计模式之代理模式原理及实现代码分享
    简介Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术。生活中的方方面面都可以虚拟到代码中。代理模式所讲的就是现实生活中的这么一个概念:中介。代理模式的定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。...
    99+
    2023-05-30
    java 设计模式 代理模式
  • Docker工作模式及原理详解
    如下图所示: 我们在使用虚拟机和docker的时候,就会出现这样一个疑问:Docker为什么比VM虚拟机快呢? 上面这张图就很客观的说明了这个问题 1、Docker有着比虚拟机更...
    99+
    2022-11-12
  • python实现高斯模糊及原理详解
    高斯模糊是一种常见的模糊技术,相关知识点有:高斯函数、二维卷积。  (一)一维高斯分布函数 一维(连续变量)高斯函数形式如下,高斯函数又称“正态分布函数”: μ是分布函数的均值(或者期望),sigma是...
    99+
    2022-06-02
    python 高斯模糊
  • Spring AOP底层原理及代理模式
    目录Spring AOP底层原理代理模式一、什么是 AOP二、AOP 底层原理1. 什么是代理?2. 什么是静态代理3. 什么是动态代理Spring AOP底层原理代理模式 一、什么...
    99+
    2022-11-13
  • Java 代理模式详解
    Java 代理模式详解 前言一、代理模式概述二、静态代理1、概述2、实现步骤3、代码演示 三、动态代理1、JDK 动态代理机制(1)JDK 动态代理类使用步骤(2)代码示例 2、CGLIB 动态代理机制(1)CGLIB 动...
    99+
    2023-08-18
    代理模式 java 开发语言
  • JDK动态代理过程原理及手写实现详解
    目录JDK动态代理的过程手写实现JDK动态代理创建MyInvocationHandler接口创建MyClassLoader类加载器创建代理类使用自定义动态代理类创建接口创建被代理接口...
    99+
    2022-11-13
  • Spring AOP底层原理及代理模式实例分析
    这篇文章主要介绍“Spring AOP底层原理及代理模式实例分析”,在日常操作中,相信很多人在Spring AOP底层原理及代理模式实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
    99+
    2023-06-30
  • MyBatisPlus代码生成器的原理及实现详解
    目录一、代码生成器原理分析二、代码生成器实现一、代码生成器原理分析 我们在观察之前写的代码的时候,会发现很多重复的内容。  一个Book模板,,只需要把红色部分的内容全部...
    99+
    2022-11-13
    MyBatisPlus代码生成器原理 MyBatisPlus代码生成器实现 MyBatisPlus 代码生成器
  • 代理模式:JAVA静态代理和动态代理的实例和实现详解
    目录前言静态代理实现简述创建human接口创建接口实现类创建针对接口实现增强操作的代理代理实现效果动态代理实现简述要点:向上转型创建YoungMan接口创建两个接口实现类创建动态代理...
    99+
    2022-11-12
  • 详解Java单例模式的实现与原理剖析
    目录一、什么是单例模式二、哪些地方用到了单例模式三、单例模式的优缺点优点缺点四、手写单例模式饿汉式枚举饿汉式DCL懒汉式双检锁懒汉式内部类懒汉式小结一、什么是单例模式 单例模式(Si...
    99+
    2022-11-13
  • Java设计模式之代理模式详解
    目录一、代理模式二、静态代理三、动态代理一、代理模式 代理模式就是有一个张三,别人都没有办法找到他,只有他的秘书可以找到他。那其他人想和张三交互,只能通过他的秘书来进行转达交互。这个...
    99+
    2022-11-12
  • 详解JavaBellman-Ford算法原理及实现
    目录一 点睛二 算法步骤三 算法实现四 测试一 点睛 如果遇到负权边,则在没有负环(回路的权值之和为负)存在时,可以采用 Bellman-Ford 算法求解最短路径。该算法...
    99+
    2022-11-13
  • MySql事务及ACID实现原理详解
    目录逻辑架构和存储引擎自动提交特殊操作ACID 特性原子性持久性隔离性脏读、不可重复读和幻读事务隔离级别MVCC一致性逻辑架构和存储引擎 自动提交 MySQL 中默认采用的是自动提...
    99+
    2022-11-13
  • Java实现JDK动态代理的原理详解
    目录概念案例静态代理JDK动态代理模式原理分析真相大白概念 代理:为控制A对象,而创建出新B对象,由B对象代替执行A对象所有操作,称之为代理。一个代理体系建立涉及到3个参与角色:真实...
    99+
    2022-11-13
  • 图文详解牛顿迭代算法原理及Python实现
    目录1.引例2.牛顿迭代算法求根3.牛顿迭代优化4 代码实战:Logistic回归1.引例 给定如图所示的某个函数,如何计算函数零点x0 在数学上我们如何处理这个问题? 最简单的办...
    99+
    2022-11-11
  • Spring中AOP概念与两种动态代理模式原理详解
    目录1.概念1.AOP技术简介2.AOP的优势3.Spring AOP术语4.AOP 开发明确的事项 2.AOP底层实现1.AOP 的动态代理技术:3.基于cglib的动态...
    99+
    2022-11-12
  • JavaScript 设计模式中的代理模式详解
    前言: 代理模式,代理(proxy)是一个对象,它可以用来控制对另一个对象的访问。 现在页面上有一个香港回归最想听的金典曲目列表: <ul id="container">...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作