第二十二章 Spring AOP⾥⾯的代理知识

2023-11-12

1.静态代理和动态代理

  • 什么是代理
    为某⼀个对象创建⼀个代理对象,程序不直接⽤原本的对象,⽽是由创建的代理对象来控制对原对象,通过代理类这中间⼀层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间
    A ->B-> C
  • 什么是静态代理
    由程序创建或特定⼯具⾃动⽣成源代码,在程序运⾏前,代理类的.class⽂件就已经存在
  • 什么是动态代理
    在程序运⾏时,运⽤反射机制动态创建⽽成,⽆需⼿动编写代码
    JDK动态代理      CGLIB动态代理

2.代理模式实战之静态代理

  • 什么是静态代理
    由程序创建或特定⼯具⾃动⽣成源代码,在程序运⾏前,代理类的.class⽂件就已经存在
    通过将⽬标类与代理类实现同⼀个接⼝,让代理类持有真实类对象,然后在代理类⽅法中调⽤真实类⽅法,在调⽤真实类⽅法的前后添加我们所需要的功能扩展代码来达到增强的⽬的
  • 优点
    代理使客户端不需要知道实现类是什么,怎么做的,⽽客户端只需知道代理即可
    ⽅便增加功能,拓展业务逻辑
  • 缺点
    代理类中出现⼤量冗余的代码,⾮常不利于扩展和维护
    如果接⼝增加⼀个⽅法,除了所有实现类需要实现这个⽅法外,所有代理类也需要实现此⽅法。增加了代码维护的复杂度
    在这里插入图片描述

3.AOP的实现策略之JDK动态代理

  • 什么是动态代理
    在程序运⾏时,运⽤反射机制动态创建⽽成,⽆需⼿动编写代码
    JDK动态代理与静态代理⼀样,⽬标类需要实现⼀个代理接⼝,再通过代理对象调⽤⽬标⽅法
  • 实操
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.AOP的实现策略之CGLib动态代理

  • 什么是动态代理
    在程序运⾏时,运⽤反射机制动态创建⽽成,⽆需⼿动编写代码
    CgLib动态代理的原理是对指定的业务类⽣成⼀个⼦类,并覆盖其中的业务⽅法来实现代理
    在这里插入图片描述在这里插入图片描述

5.CGLib动态代理和JDK动态代理总结

  • 动态代理与静态代理相⽐较,最⼤的好处是接⼝中声明的所有⽅法都被转移到调⽤处理器⼀个集中的⽅法中处理,解耦和易维护
  • 两种动态代理的区别
    • JDK动态代理:要求⽬标对象实现⼀个接⼝,但是有时候⽬标对象只是⼀个单独的对象,并没有实现任何的接⼝,这个时候就可以⽤CGLib动态代理
    • CGLib动态代理,它是在内存中构建⼀个⼦类对象从⽽实现对⽬标对象功能的扩展
    • JDK动态代理是⾃带的,CGlib需要引⼊第三⽅包
    • CGLib动态代理基于继承来实现代理,所以⽆法对final类、private⽅法和static⽅法实现代理
  • Spring AOP中的代理使⽤的默认策略
    • 如果⽬标对象实现了接⼝,则默认采⽤JDK动态代理
    • 如果⽬标对象没有实现接⼝,则采⽤CgLib进⾏动态代理
    • 如果⽬标对象实现了接扣,程序⾥⾯依旧可以指定使⽤CGlib动态代理
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第二十二章 Spring AOP⾥⾯的代理知识 的相关文章

随机推荐

  • Oracle存储过程获取入参出参(顺序,名字,类型,入参/出参)

    调用SQL语句 PROCEDURE NAME为过程名 自行替换要查询的过程名 POS为参数位置 NAME为参数名 TYPE为参数类型 IN OUT为入参 出参 SELECT A POSITION POS A ARGUMENT NAME NA
  • ABB 120 六轴机械手臂编程调试(三)

    下一步进行机械手臂的程序编写 程序只是进行简单的点位运动 实现抓取功能 程序控制的点位表 输入点位 点位描述 输出点位 点位描述 DI5 夹取完成 DO5 夹取物料 DI6 放料完成 DO6 放下物料 DI7 回原点 DO7 设备就绪 DI
  • Python练习——基础练习题2

    因为控制台会让不断输入 索性就把input放到注释里了 这一片主要练习if判断和while循环 初级 判断下列语句的打印结果 1 print True and True or True 2 print True and True or Fa
  • 因果图分析法例子

    某软件规格说明书包含这样的要求 第一列字符必须是A或B 第二列字符必须是一个数字 在此情况下进行文件的修改 但如果第一列字符不正确 则给出信息L 如果第二列字符不是数字 则给出信息M 解答 1 根据需求 分析出原因和结果如下 原因 1 第一
  • smbms(超市管理系统)源码 + 分析

    在项目开始之前 我们首先要对项目的整体架构分析一下 该项目一共分为四个模块 登录注销 用户管理 订单管理 供应商管理 其中用户管理 订单管理以及供应商管理都是需要对数据库进行crud的 项目的整体架构图如下 1 前期准备 1 项目架构 2
  • Android中Activity跳转到具体的Fragment的方法

    1 首先在需要跳转的Activity写此代码 Intent intent new Intent from MainActivity class intent addFlags Intent FLAG ACTIVITY SINGLE TOP
  • 理解Android上下文Context

    Context使用场景总的来说分为两大类 使用Context调用方法 比如启动Activity 访问资源 调用系统级服务等 调用方法时传入Context 比如弹出Toast 创建Dialog等 Activity Service和Applic
  • 安装snownlp报错 error: subprocess-exited-with-error

    安装snownlp报错error subprocess exited with error 解决方案重新安装importlib metadata pip uninstall importlib metadata pip install im
  • Zabbix监控平台部署实验——自定义zabbix监控项目

    Zabbix系列文章目录 第一章 Zabbix5 0版本的安装教程 第二章 Zabbix监控平台部署实验 自定义zabbix监控项目 目录 Zabbix系列文章目录 前言 二 操作步骤 1 安装配置环境 2 授权zabbix server可
  • STM32HAL库的基本使用(1)- GPIO引脚配置

    前言 作者使用的是STM32L431RCT的开发板 Cortex M4的内核 是大学老师教学用的 原理图如下 原理图下载链接 https pan baidu com s 1c8WFBO9bPxarzaOKqDrl0Q pwd 6666 提取
  • Android中Recycler网格布局管理器GridLayoutManager用法

    使用RecyclerView可以制作出类似GridView的样式 但比GridView更加强大 这里我们就介绍一下RecyclerView和GridLayoutManager结和的用法 1 GridLayoutManager常用方法 构造函
  • ROS:开机自启动

    Ubuntu14 04 网上很多资料说在 etc rc local中添加脚本 实验之后完全没用 可能是系统版本不对 解决 Ubuntu14 04 开机项命令 gnome session properties 点击 add name 名字 c
  • mysql count(*)、count(1) 、count(列名)、count(distinct expr)

    文章目录 概述 优化 MyISAM InnoDB 参考文档 https dev mysql com doc refman 8 0 en group by functions html function count 概述 count 为 SQ
  • 蓝桥杯每日一题2023.9.8

    蓝桥杯2023年第十四届省赛真题 飞机降落 C语言网 dotcpp com 题目描述 N 架飞机准备降落到某个只有一条跑道的机场 其中第 i 架飞机在 Ti 时刻到达机场上空 到达时它的剩余油料还可以继续盘旋 Di 个单位时间 即它最早 可
  • Learning Video Object Segmentation from Static Images

    Abstract 论文灵感来源于 实例分割和目标跟踪 特点 1 我们的模型在每帧的基础上进行 并由前一帧的输出导向下一帧中的关注对象 2 一个高度准确的视频目标分割可以用一个卷积神经网络并用静态的图片来训练 3 使用在线和离线的策略 前者产
  • 为什么那么多的人选择到Java培训机构学习

    目前IT行业Java编程是最炙手可热的技术 Java应用范围广泛 企业在大量招收Java人才 薪水也随之上涨 发展前景越来越好 因此现在有越来越多的人发现了这片美丽的新大陆 都正在拼命往里的挤 一些觉得Java培训机构费用贵的同学会选择自学
  • public Map kaoYanAllStation() { Map map = new HashMap<>(); ...

    首先 根据代码中的注释可以看出 该方法主要是获取各种气象数据 对其进行计算和比较 然后将结果存储在一个 Map 对象中返回 为了优化这段代码 可以考虑以下几个方面 减少重复代码 在代码中可以看到 获取历年同期降水和温度数据的代码几乎一模一样
  • LVS常用模式(DR、NAT、TUN)以及ldirector和keepalived

    1 LVS简单介绍 1 lvs定义LVS是Linux Virtual Server的简写 意即Linux虚拟服务器 是一个虚拟的服务器集群系统 LVS集群采用IP负载均衡技术和基于内容请求分发技术 调度器具有很好的吞吐率 将请求均衡地转移到
  • Java学习教程,Java从入门到精通,全套Java视频教程+笔记+配套工具

    目录 一 大纲 一 Java基础 二 计算机基础 三 工具的使用 四 数据库 五 web前端 六 JavaWeb 七 框架 八 互联网分布式技术 发现身边很多自学java却放弃的 真的挺可惜的 白白浪费了几个月宝贵的时间 且放弃一次 就会有
  • 第二十二章 Spring AOP⾥⾯的代理知识

    1 静态代理和动态代理 什么是代理 为某 个对象创建 个代理对象 程序不直接 原本的对象 是由创建的代理对象来控制对原对象 通过代理类这中间 层 能有效控制对委托类对象的直接访问 也可以很好地隐藏和保护委托类对象 同时也为实施不同控制策略预