AOP的底层实现—之CGLIB的动态代理——(八)

细说Spring——AOP详解(使用CGLIB实现AOP) 一、动态代理实现AOP的缺陷 在上一篇文章细说Spring——AOP详解(动态代理实现AOP)中讲解了如何使用动态代理实现AOP,虽然Java动态代理为我们提供了非常灵活的代理机制,但Java动态代理是基于接口的,如果目标对象没有实现接口我们该如何代理呢?这时候我们就需要使用CGLIB来实现AOP了。 二、CGLIB实现代理的原理 我们先创建一个目标对象 package demo1; ... 阅读详情

CGLIB的动态代理

1.在src/main下创建Java源文件,创建包com.aop.demo2

在这里插入图片描述

2.在pom.xml内引入依赖
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>

3.创建Product类
package com.aop.demo2;

public class Product {
    public void save() {System.out.println("保存商品···");}

    public void upsate() {
        System.out.println("修改商品···");
    }

    public void delete() {
        System.out.println("删除商品···");
    }

    public void find() {
        System.out.println("查询商品···");
    }
}

4.创建SpringDemo2测试类
package com.aop.demo2;

import org.junit.jupiter.api.Test;

public class SpringDemo2 {
    @Test
    public void demo1(){
        Product product = new Product();

        Product proxy = (Product) new MyCglibProxy(product).createProxy();

        proxy.save();
        proxy.upsate();
        proxy.delete();
        proxy.find();
    }
}

5.创建MyCglibProxy类实现CGLIB动态代理
package com.aop.demo2;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class MyCglibProxy implements MethodInterceptor {
    private  Product product;

    public MyCglibProxy(Product product) {
        this.product = product;
    }

    public Object createProxy(){
        //1.创建核心类
        Enhancer enhancer = new  Enhancer();
        //2.设置父类
        enhancer.setSuperclass(product.getClass());
        //3.设置回调
        enhancer.setCallback(this);
        //4.生成代理
        Object proxy=enhancer.create();
        return  proxy;

    }

    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        if ("save".equals(method.getName())){
            System.out.println("权限校验");
            return methodProxy.invokeSuper(proxy,args);
        }
        return methodProxy.invokeSuper(proxy,args);
    }
}

6.输出结果

在这里插入图片描述

Spring 中 AOP 的实现原理——动态代理 原文地址 https://www.cnblogs.com/tuyang1129/p/12878549.html Spring AOP 的实现原理 Spring的AOP实现原理其实很简单,就是通过动态代理实现的。如果我们为Spring的某个bean配置了切面,那么Spring在创建这个bean的时候,实际上创建的是这个bean的一个代理对象,我们后续对bean中方法的调用,实际上调用的是代理类重写的代理方法。而Spring的AOP使用了两种动态代理,分别是 JDK 的动态代理,以及 CGLib 的动态代理。 阅读详情

相关推荐

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 280

代理模式之CGLIB代理

CGLIB动态代理

小白有个大牛梦 1320

Pointnet++环境配置+复现

深度学习点云经典网络Pointnet++

weixin_58663121的博客 8075

CGLIB 动态代理

目录 CGLIB 动态代理 简单结构: 添加依赖 定义类 CGLIB 动态代理 JDK的动态代理机制只能代理实现了接口的类。而不能实现接口的类就不能使用JDK的动态代理,CGLIB是针对类来实现代理的,它的原理是对指定目标类生成一个子类,并覆盖其中的方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。 简单结构: 实现原理:继承思想 代理类继承目标类,重写目标类中的方法, CGLIB像是一个拦截器,在调用我们的代...

m0_61609890的博客 7355

在 SAP BTP Cloud Foundry 环境中开发 SAP HANA 的完整实战路线图

SAP HANA Cloud迁移路径解析:从本地到云原生的数据库现代化 本文梳理了SAP HANA在Cloud Foundry环境中的架构定位和实施路径,针对不同起点的项目提供迁移建议。核心内容包括: SAP HANA Cloud在Cloud Foundry中的双重角色:既作为平台服务提供数据库实例,又通过HDI容器管理MTA应用中的数据库工件。 针对四类典型项目起点的迁移策略: 绿地项目:直接采用CAP+SAP HANA Cloud组合 已有HANA service或XS advanced项目:需对照兼容

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 266

【图论】系列(一)之图论的构成

图论是研究图的数学分支,本章介绍了图论的基本构成和概念

qq_30066733的博客 748

Java动态代理,你不知道的都在这里。

先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索【程序职场】关注这个执着的职场程序员。 价值:Java技能,面试经验指导,简历优化,职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验。 01 概念 动态代理是设计模式当中代理模式的一种。 主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情,因为在InvocationHandler的invoke方法中,你可以直接获取正在调用方法对应的Method对象,具体应用的话。 比如可..

401

华为OD机试真题 新系统【优化充电桩调度算法】

华为OD机试 新系统真题【优化充电桩调度算法】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【优化充电桩调度算法】

qq_45776114的博客 753

pom.xml 依赖配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd

我是天才的专栏 2万+

推荐系统(六)双塔模型

双塔模型是推荐场景中常用的粗排模型之一,本节主要介绍几种典型的双塔模型及其变型,如SENet 双塔模型,并联双塔,蒸馏学习,对偶增强双塔,阿里 COLD。

Jin_Kwok的博客 5143

【案例讲解】LVGL关于旋转的配置

在实现项目中,因为横竖屏的关系,需要对其做90度的旋转。配置旋转时发现一些局部刷新控件,旋转后效果不对。异常图标正常图标。

Bigan(安)的博客 4284

Maven项目中pox.xml文件报错以及项目编译错误

我用Eclipse开发Maven项目,本来好好的,但是后来

daydayupzzc的专栏 15万+

QCC304x系列开发教程(基础篇)之2.1-QCC3040之开发环境搭建

一、安装MDE 1.解压qualcomm_mde.win.2.4_installer_2.4.1.4压缩包,安装MDE_WIN_2.4.1.4_x64.exe,路径自定义 点击NEXT, 安装完成后,点击Finish. 完成安装后,桌面生成快捷方式

心跳包的博客 6079

动态代理之 cglib 实现

(尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_25827845/article/details/87513102冷血之心的博客) 目录 前言: 正文: AOP(面向切面编程) JDK动态代理 cglib实现动态代理 cglib包结构: cglib动态代理相关的基础类: cglib动态代理Demo 总结: 前言:         这篇文...

冷血之心的博客 9287

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Spring】Spring AOP底层原理:JDK动态代理和CGLIB动态代理

Spring AOP 的实现原理是基于动态代理和字节码操作的。而动态代理是基于反射机制的。 在编译时, Spring 会使用 AspectJ 编译器将切面代码编译成字节码文件。在运行时, Spring 会使用 Java 动态代理或 CGLIB 代理生成代理类,这些代理类会在目标对象方法执行前后插入切面代码,从而实现AOP的功能。

m0_65277261的博客 3709

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring框架之AOP动态代理底层实现原理

本文摘要: 本章介绍了AOP的基础实现,重点讲解了JDK动态代理在Spring中的应用。内容包括: AOP概念与实现方式对比:Spring AOP采用动态代理,而AspectJ基于编译期增强 JDK动态代理核心机制:通过Proxy.newProxyInstance创建代理对象,InvocationHandler实现方法增强 示例代码展示:演示了如何创建代理对象并实现前置/后置增强逻辑 Spring的扩展实现:介绍了ReflectiveMethodInvocation类,该类封装方法调用信息,为拦截器链式调用

几许的博客 1553

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring AOP与动态代理

AOP(Aspect Oriented Programming)意为面向切面编程通过预编译和运行期间动态代理来实现程序功能的统一维护的一种技术。是Spring框架里面一个重要的点。它提供了一种将横切关注点(如日志记录、事务管理、安全性等)与业务逻辑分离的机制。AOP 允许开发者将这些关注点模块化,并在不修改业务逻辑代码的情况下,对业务逻辑进行增强。Spring AOP 基于代理机制实现,它可以在运行时动态地创建目标对象的代理对象。

qq_52295468的博客 2456

【Spring】AOP底层原理(动态代理)-》 AOP概念及术语 -》 AOP实现

AOP —— 面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

ebb29bbe的博客 1956

Spring AOP底层实现- JDK动态代理和CGLIB动态代理

Spring AOP是运行时织入的,那么运行时织入到底是怎么实现的呢?答案就是代理对象。 代理又可以分为静态代理和动态代理。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 静态代理的每一个代理类只能为一个接口服务,这样一来程序开发中必然会产生过多的代理,而且...

JavaLab 7015

Spring AOP实现原理(动态代理 vs CGLib)

是一种编程思想,允许你在不修改原有代码的情况下,动态地给某些方法添加额外功能(如日志、事务、权限控制等)。精确定位需要增强的方法,如:“所有Service层的public方法”Pointcut切点。触发invoke()

m0_60697978的博客 1137

CGLIB 动态代理及其原理分析

一、简介   CGLIB,即 Code Generation Library,是一个强大的、高性能的代码生成库。它可以在运行期扩展 Java 类与实现 Java 接口(JDK 动态代理只能用于接口),它被许多 AOP 框架广泛地使用,如为 Spring AOP 提供方法的 interception(拦截),被 Hibernate 用来代理单端(多对一和一对一)关联(延迟提取集合使用的另一种机制)。本文使用的 CGLIB 依赖如下: <dependency> <groupId>

weixin_41427129的博客 6205

深入Spring AOP底层——JDK、CGLIB动态代理

代理模式就是为其它对象提供一种代理以控制对这个对象的访问,它的作用就是通过一个代理类间接调用目标方法,并且在间接调用的过程中还可以对目标方法进行功能增强。打个比方:你可以想象,你想要租房,中介(代理)会帮你联系房东(目标对象),同时中介还会负责和你签订合同,代房东将房屋出租给你(如果这是一个黑中介,可能还会想你索取各种费用),那么在上面的过程中:(1)中介代房东将房屋出租给你,就属于间接调用(本质是房东出租给你)(2)黑中介向你索取各种费用,就属于功能增强了。

zhakakqns的博客 948

Spring Boot 2 中为何默认采用 CGLIB 实现 AOP?底层原理与实现详解

本文深入探讨了Spring Boot 2中AOP实现从JDK动态代理转向CGLIB动态代理的原因及技术细节。文章对比了两种代理机制的差异,指出CGLIB在适用性(支持普通类代理)和性能(基于ASM字节码增强)上的优势。详细解析了CGLIB的工作原理,包括Enhancer类创建子类代理、MethodInterceptor拦截逻辑以及FastClass调用机制,并通过代码示例演示了CGLIB的实际应用。最后提供了在Spring Boot中控制代理方式的配置建议和使用注意事项,帮助开发者更好地理解和使用这一技术。

qq_46371374的博客 1313

【Spring AOP】AOP 底层实现原理 —— 动态代理类的创建(JDK、CGlib)、工厂如何加工原始对象

AOP编程AOP 编程AOP 概念AOP 编程的开发步骤切面的名词解释AOP 的底层实现原理动态代理类的创建JDK 的动态代理(原理 + 编码)CGlib 的动态代理 更多内容请查看笔记目录:【Spring 5.x】学习笔记汇总 AOP 编程 AOP 概念 POP (Producer Oriented Programing) 面向过程(方法、函数)编程 —— C 以过程为基本单位的程序开发,通过过程间的彼此协同,相互调用,完成程序的构建。 OOP (Object Oritened Programin

萌宅鹿的技术小屋 3228

Spring AOP底层实现原理(动态代理)

什么是AOP? AOP(面向切面编程)是OOP(面向对象编程)的延续, AOP采取横向抽取机制,取代了传统的纵向继承体系重复性代码 Spring AOP底层实现方式 JDK动态代理 CGLib代理 ...

想好了就去做吧 即便失败了 至少这条路上留下了你的脚印 2126

什么是AOP,AOP的底层实现原理

什么是AOP?AOP的底层实现 1.什么是AOP AOP(Aspect Oritented Programing) 面向切面编程。 AOP采取横向抽取机制,取代了传统的继承纵向继承体系的重复性代码(性能监视,事务管理,安全检查,缓存)。 Spring的AOP采用了纯java实现,不需要专门的编译过程和类加载器,在运行期间通过动态代理的方式向目标类注入增强代码。 2.AOP应用场景说明 对程序进行增...

ToBeWhatYouWant 9937
上一篇: AOP的底层实现—之JKD的动态代理——(七)
下一篇: 前端主流图表框架
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值