AOP的底层实现—之JKD的动态代理——(七)

spring AOP 动态代理 jkd动态代理和cglib动态代理 hibernate使用cglib延迟加载 spring 的AOP 实现 可以使用jdk的动态代理,也可以使用cglib的动态代理 先说下两者区别: 静态代理:代理之前就已经知道了代理者和被代理者 动态代理:代理之前并不清楚,在运行时使用反射机制动态生成代理类的字节码 无需我们手动编写它的源代码 jdk动态代理:java.lang.reflect 包中的Proxy类,InvocationHandler 接口提供了生成动态代理类的能力。* 只能代理实现了接口的类,没有实现接口的类不能实现JDK动态代理。*jdk实现动态代理模式,必须使用接口。 阅读详情

JKD的动态代理

  • 新建项目
    在这里插入图片描述
  • 项目结构
    在这里插入图片描述
1.在src/main下创建Java源文件,创建包com.aop.demo1
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>
3.创建UserDao接口
package com.aop.demo1;

public interface UserDao {
    public void save();

    public void upsate();

    public void delete();

    public void find();
}

4.创建UserDaoImpl接口
package com.aop.demo1;

public class UserDaoImpl implements UserDao{
    public void save() {
        System.out.println("保存用户···");
    }

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

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

    public void find() {
        System.out.println("查询用户···");
    }
}
5.创建SpringDemo1测试类
package com.aop.demo1;

import org.junit.jupiter.api.Test;

public class SpringDemo1 {
    @Test
    public void demo1(){
        UserDao userDao = new UserDaoImpl();
//        原来的方法
//        userDao.save();
//        userDao.upsate();
//        userDao.delete();
//        userDao.find();
        UserDao proxy = (UserDao) new MyJdkProxy(userDao).createProxy();
        proxy.save();
        proxy.upsate();
        proxy.delete();
        proxy.find();
    }

}
6.创建MyJdkProxy类实现JKD动态代理
package com.aop.demo1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class MyJdkProxy implements InvocationHandler {
    private UserDao userDao;

    public MyJdkProxy(UserDao userDao) {
        this.userDao = userDao;
    }

    public  Object createProxy(){
        Object proxy = Proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces(),this);
        return proxy;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if ("save".equals(method.getName())){
            System.out.println("权限校验");
            return method.invoke(userDao,args);
        }
        return method.invoke(userDao,args);
    }
}

7.输出结果

在这里插入图片描述

Spring-MVC-AOP 一,MVC设计思想, 如果将大量的代码写到一个方法中,后期维护不易,开发效率低 MVC说明: 1,M,model数据层,数据处理,数据的持久化 2,V,view 视图层,前端页面相关的内容 3,C,controller。控制层,控制数据的流转过程 二,层级代码结构 前提:在项目中代码需要松耦合,根据MVC指导想,后端代码进行了演化,演变为现在的层级代码结构。 1,Controller层,@RestController,控制层,主要实现与前端页面的交互!!! 2,Service层,@Se 阅读详情

相关推荐

通达信源码-主力建仓-AI投研图灵室出品

AI投研图灵室1:=3*SMA((CLOSE-LLV(LOW,75))/(HHV(HIGH,75)-LLV(LOW,75))*100,20,1)-2*SMA(SMA((CLOSE-LLV(LOW,75))/(HHV(HIGH,75)-LLV(LOW,75))*100,20,1),15,1);AI投研图灵室2W:=100-100*(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14));AI投研图灵室3:=SMA(SMA(AI投研图灵室2,3,1),3,1);

qq_57222058的博客 4384

设计模式之代理模式(七)

代理模式简介         代理模式定义:为被代理对象提供代理以控制该对象的访问权限。例如我们想找明星出演商业活动的时候是不可以直接联系本人的,是需要联系经纪人。代理模式通用类图入门案例一         例如我想找颖宝去演出某部电视剧,颖宝平时的工作很忙,如果什么事情都要自己处理的话,就会显得很劳累。所以才有明星经纪人的出现,那么经纪人其实就是颖宝的代理人的。代理颖宝处理一部分事情,你要找颖宝...

一叶知春秋 2383

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

Modeler_xiaoyu的博客 1万+

动态代理的实现与AOP中的动态代理

一、JKD实现的动态代理 Proxy类 Proxy提供了用于创建动态代理和代理对象的静态方法,它也是所有动态代理类的父类。如果在程序中为一个或多个接口动态地生成实现类,就可以使用Proxy来创建动态代理类;如果需要为一个或多个接口动态地创建实例,也可以使用Proxy来创建动态代理实例。 重要方法 Proxy提供了如下两个方法来创建动态代理类和动态代理实例: static Class<?> getProxyClass(ClassLoader loader, Class<?>...in

大魚的个人博客,如有不足,欢迎指正。 478

别再让会议变‘回音壁’:手把手教你调优WebRTC的AEC3回声消除(附实战代码)

本文深入解析WebRTC的AEC3回声消除技术,提供从参数调优到声学环境适配的实战指南。通过诊断回声特征、解剖核心参数(如filter.length_blocks和delay_estimate_smoothing)以及应对特殊场景(如密闭空间与开放办公区),帮助开发者有效解决视频会议中的回声问题,提升语音通信质量。附有实战代码和调试工具,适合需要优化实时通信体验的开发者。

weixin_29220405的博客 171

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

AOP中的动态代理的区别--JDK和CGLIB

区别 spring AOP的底层实现机制是动态代理,动态代理有JDK 和CGLIB 动态代理 下面说一下这两种动态代理的区别: 1、JDK动态代理只提供接口的代理,不支持类的代理 jdk会在运行时为目标类生成一个 动态代理类$proxy*.class 该代理类是实现了目标类接口的一个类,并且会实现接口所有的方法增强代码 调用时 通过先去调用处理类进行增强,再通过反射的方式进行调用目标方法,从而实现AOP 2、如果代理类 没有实现接口,那么spring AOP会选择使用CGLIB来动态代理目标类 CGL

qq_40277163的博客 2062

从原理到应用:深入解析双编码器在机器人关节力矩感知中的实现

本文深入解析了双编码器方案在机器人关节力矩感知中的实现原理与应用。该方案通过在电机侧和输出侧分别安装编码器,利用两者位置差异间接高精度计算外力,克服了传统电流环精度不足和扭矩传感器成本高昂的缺点。它为实现协作机器人的丝滑拖动示教、灵敏碰撞检测以及足式机器人的动态平衡与柔顺控制提供了关键技术支撑,是目前高性能机器人力控的主流选择。

t8u9v0w1x的博客 662

spring5框架中AOP的概念、底层原理

spring框架中最重要的两个分是:IOC和AOP 接下来,给大家讲述一下AOP,先从概念入手,然后就是一系列的操作。 文章目录1、概念2、底层原理3、JKD动态代理4、术语5、准备工作 1、概念 (1) 面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 (2) 通俗描述:不通过修改源代码方式,在主干功能里面添加新功能 登录流程原本是写好的,但是没有权限判断模块,后期要进行添加该模块,这个时候哦我们就用到

瘦身狂魔的博客 393

1分钟了解LangChain是什么?

是一个基于大型语言模型(LLM)开发应用程序的框架, 它旨在简化语言模型应用的开发流程,特别是在构建对话系统和其他基于语言的AI解决方案时.目标是将复杂的语言模型技术转化为可通过简单API调用实现的功能,从而使开发者能够更加专注于创造性的解决方案设计。高效地解决了开发大语言模型应用的痛点问题。Langchain 最主要的特色是可以将 LLM 应用研发过程中的交互 Prompt、LLM 模型调用、语言模型与环境互动的自适应等方式融为一体。

gorgor在码农 2630

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

动态代理,以及面向切面编程(AOP)

动态代理:可以在程序的执行过程中,创建代理对象。 通过代理对象执行方法,给目标类的方法增加额外的功能(功能增强) 动态代理 实现方式: jdk动态代理,使用jdk中的Proxy,Method,InvocetionHandler创建代理对象。 Jdk动态代理要求目标类必须实现接口 cglib动态代理:第三方的工具库,创建代理对象,原理是继承。通过继承目标类,创建子类, 子类就是代理对象。要求目标类不能是final的,方法也不能是final的。 JKD动态代理实现步骤 创建目标类,SomeServiceImp

qq_48785525的博客 382

原理之(〇)3D Gaussian Splatting 数学原理与推导

3D Gaussian Splatting源于EWA的理论基础,本文重点从EWA模型出发,详细推导3D GS中的数学原理,加深对鱼眼相机畸变场景下的理解。

scott198512的博客 4157

spring(三)aop(五种通知方法结合动态代理案例)

1.Aop原理 2.五种通知方法结合动态代理案例

weixin_43189971的博客 469

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SpringBoot中使用LoadTimeWeaving技术实现AOP功能

1. 关于LoadTimeWeaving1.1 LTW与不同的切面织入时机AOP——面向切面编程,通过为目标类织入切面的方式,实现对目标类功能的增强。按切面被织如到目标类中的时间划分,主要有以下几种:1.运行期织入这是最常见的,比如在运行期通过为目标类生成动态代理的方式实现AOP就属于运行期织入,这也是Spring AOP中的默认实现,并且提供了两种创建动态代理的方式:JDK...

weixin_34279061的博客 736

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

通过三种方式实现AOP代理:Java代码实现JDK代理和Cglib代理、XML配置实现AOP代理、以及注解实现AOP代理

AOP的两种代理方式,JDK代理和cglib代理 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言一、AOP相关概念1.AOP代理相关概念2.AOP开发明确的事项3.以上要点总结二、基于原始代码实现代理1.新建Maven项目,使用原始的代码实现JDK代理方法2.新建Maven项目,使用原始代码实现Cglib代理方法三、基于XML配置方式实现代理1.使用XML方式实现代理2.XML方式配置说明四、基于注解配置方式实现代理1.使用注解方式实现代理总结欢迎使用Markdown编辑器新的改变功能

m0_51362464的博客 250

pscad IEEE标准系统搭建说明

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

Spring AOP之手动、半自动方式

面向切面编程 Aspect Oriented Programming AOP的特点: AOP采用横向抽取机制,取代了传统纵向继承体系重复性代码 SpringAOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码 经典应用: 事务管理、性能监视、安全检查、缓存、日志等。 AOP 原理 aop底层将采用代理机制进行实现 动态代理的两种机...

代码赋予我力量 822

第三章 AOP面向切面编程

第三章 AOP 面向切面编程 3.1 动态代理 3.2 AOP 概述 3.3 AOP 简介 3.4 AOP 编程术语 3.1 动态代理 可以在程序的执行过程中,创建代理对象。通过代理对象执行方法,给目标类增加额外的功能而不改变原来类中的代码(功能增强) 1、JDK 动态代理:要求目标对象必须实现接口,通过 java.lang.reflect 包提供三个类支持代理模式 Proxy、Method 和 InvocationHandler 。 实现步骤: 1)创建目标类(如果目标类已经存在,此步骤可以省略) 2)创

qq_39171225的博客 279

Spring源码学习(3) —— CglibAopProxy实现AOP

前面我们解读了jkd动态代理方式实现aop的源码,今天我们重点来看下cglib方式实现aop的原理。与JdkDynamicAopProxy一样,CglibAopProxy实现了AopProxy接口,主要是需要用到其getProxy方法来生成代理对象。 1.生成代理对象 getProxy()方法核心逻辑如下: public Object getProxy(ClassLoader cla...

蔡小兵的博客 2159

java基础之动态代理

动态代理是实现代理模式的一种方式, 代理模式请参见博文:设计模式之代理模式 动态代理,是在程序运行阶段才创建代理类从而实现代理模式的一种方式, 动态代理可以很方便的对类的方法进行批量统一的处理, 动态代理有两种实现方式, 一种是jdk的动态代理,其底层使用的是反射,第二种是cglib方式, 使用的是第三方的库,底层是asm;这两种方式都有各自的特点, 1    jkd方式实现动态代理创建的对象的速...

胃小的博客 179

Spring框架中的JDK与CGLib动态代理

我们在使用Spring框架中的getBean();从容器中获取得到代理类时有时会出先这种错误org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'xx' available 此时要明白为什么出错,我们需要理解Spring中JDK代理和CGlib代理的区别。JDK...

zzu_wlan的博客 476

uni中动态加载class_SpringBoot中使用LoadTimeWeaving技术实现AOP功能

1. 关于LoadTimeWeaving1.1 LTW与不同的切面织入时机AOP——面向切面编程,通过为目标类织入切面的方式,实现对目标类功能的增强。按切面被织如到目标类中的时间划分,主要有以下几种:1.运行期织入这是最常见的,比如在运行期通过为目标类生成动态代理的方式实现AOP就属于运行期织入,这也是Spring AOP中的默认实现,并且提供了两种创建动态代理的方式:JDK自带的针对接口的动态代...

weixin_42537499的博客 284

【Spring】最核心的两大组件 IOC/AOP 细讲之AOP部分

针对Spring AOP部分进行讲解,其中原理以及具体实现,xml与注解组合实现,完全xml实现,完全注解实现都有涉及,希望对你有所帮助

HXY19的博客 227

回首Spring源码之AOP:方法增强(责任链模式)

前言 在上一篇介绍了spirng aop创建创建动态代理的过程,本片着重分析一下切面方法的执行过程。以JKD动态代理为例。 方法增强(责任链模式) 来到JDK的动态代理类JdkDynamicAopProxy,它是一个InvocationHandler,JKD动态代理基于InvocationHandler的invoke方法进行方法增强: public Object invoke(Object proxy, Method method, Object[] args) t...

w7sss的博客 1918
上一篇: Spring AOP 概述(1)——(六)
下一篇: AOP的底层实现—之CGLIB的动态代理——(八)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值