SpringAOP-代理方式-Cglib动态代理

文章目录


cglib动态代理
cglib是基于继承的方式实现的

是继承目标类从而产生代理类

springaop底层使用的就是cglib的动态代理

package com.itheima.cjlibproxy;import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** @author healer* @Description CglibProxyUtils* @data 2024-06-08 15:21*/
public class CglibProxyUtils {public static Object createProxy(Object targetClass) {// 创建一个 enhancerEnhancer enhancer = new Enhancer();//        需要指定创建出来的代理类的父类enhancer.setSuperclass(targetClass.getClass());//        增强enhancer.setCallback(new MethodInterceptor() {public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {long start = System.currentTimeMillis();Object result = method.invoke(targetClass, args);long end = System.currentTimeMillis();System.out.println("-------->方法耗时:" + (end - start) + "ms");return result;}});//        创建代理对象return enhancer.create();}}
package com.itheima.cjlibproxy;import com.itheima.jdkProxy.JdkProxyUtil;
import com.itheima.service.DeptService;
import com.itheima.service.impl.DeptServiceImpl;/*** @author healer* @Description CglibProxyDemo* @data 2024-06-08 15:29*/
public class CglibProxyDemo {public static void main(String[] args) {DeptService deptService = new DeptServiceImpl();DeptService proxyDeptService = (DeptService) CglibProxyUtils.createProxy(deptService);proxyDeptService.update();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab---app

一 基础 标签和信号灯没有回调函数 clc,clear,close all %清理命令区、工作区,关闭显示图形 warning off %消除警告 feature jit off %加速代码运行 ysw{i}i %循环赋值 celldisp(ysw) %显示元胞数组ysw.y1{1}[1,2] …

shaderlab 关键点记录

1.C#获取着色器标签的接口 可以使用 Material.GetTag API 从 C# 脚本中读取子着色器标签, 2.常用的标签 subshader的标签 “RenderPipeline” “[name]” //向 Unity 告知此子着色器是否与 URP 或 HDRP 兼容。 值:UniversalRenderPipeline //此…

leetcode够用之java语法

常用方法 Arrays.sort()排序 import java.util.Arrays;public class Main {public static void main(String[] args) {int[] numbers {9, 2, 5, 1, 7, 3};Arrays.sort(numbers);System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 3, 5, 7, 9]} }获取str中的第…

《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化,从架构上颠覆了原有的网络管理,所以SDN的架构安全就是首先要解决的问题。例如,SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…

@BeforeAll 和 @AfterAll 必须是 static 的原因

BeforeAll 和 AfterAll 必须是 static 的原因 执行时机: BeforeAll 方法在所有测试方法之前运行。AfterAll 方法在所有测试方法之后运行。 实例化前/后的执行: 因为 BeforeAll 是在所有测试方法执行之前运行的,所以它在任何一个测试实例创建…

基于springboot的教学管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教师管理,学生管理,课程管理 教师账户功能包括:系统首页,个人中心,学生管理,课程管理,课程表…

Oracle 数据库的自动化工具:AWR 和 ASM

Oracle 数据库提供了一系列工具和技术,以提高数据库管理的效率和性能。其中,AWR和 ASM是两个关键组件。本文将详细介绍 AWR 和 ASM 的功能及其在数据库管理中的重要性。 AWR AWR 是 Oracle 数据库的一个核心部分,用于收集、处理和维护数据库…

数据结构---树与二叉树

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

【CTF MISC】XCTF GFSJ0290 reverseMe Writeup(图像处理)

reverseMe 暂无 解法 导入 Photoshop。 水平翻转,得到 flag。 Flag flag{4f7548f93c7bef1dc6a0542cf04e796e}声明 本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行&#xf…

QField如何打开工程或数据文件

Field有个文件选择器,允许从本地设备打开工程。如果想从云端打开文件,请参阅 QFieldCloud 。 注意:请注意,卸载QField时,应用程序文件夹将被删除,而更新则不会。 导入并打开本地工程 QField界面 当转到 …

了解Synchronized对象头?

1、对象头的结构 Java对象存储在内存中结构为: 对象头(Header):实例数据(Instance Data):定义类中的成员属性对齐填充字节(Padding):由于HotSpot虚拟机的自…

Web Dart前端:探索、挑战与未来展望

Web Dart前端:探索、挑战与未来展望 在数字化浪潮的推动下,Web前端技术日新月异,其中Dart语言作为一种高效且灵活的编程语言,正逐渐在Web前端领域崭露头角。然而,Dart在Web前端的应用仍面临诸多挑战和未知。本文将从四…

Linux--进程间通信(system V共享内存)

目录 1.原理部分 2.系统调用接口 参数说明 返回值 1. 函数原型 2. 参数说明 3. 返回值 4. 原理 5. 注意事项 3.使用一下shmget(一段代码) 4.一个案例(一段代码) 1.简单封装一下 2.使用共享内存 2.1挂接(shmat&#x…

Java 语言概述 -- Java 语言的介绍、现在、过去与将来

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 001 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

直接赋值导致响应式断开,前端深浅拷贝

title: 直接赋值导致响应式断开,前端深浅拷贝 date: 2024-06-08 09:56:05 tags: vue3 vue3中的ref对象的深浅拷贝问题,实际应用出现的相关的问题。 概念总述 浅拷贝 仅仅复制了数据,没有改变他原来的引用。 表现:当你对新对象…

Unity3D EventMgr事件订阅与发布详解

在游戏开发过程中,经常需要处理各种事件,比如角色的移动、碰撞、攻击等。为了更好地管理和处理这些事件,Unity3D提供了EventMgr事件订阅与发布机制,通过该机制可以实现不同对象之间的事件通信,让游戏逻辑更加清晰和灵活…

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…

单线服务器与双线服务器的区别?

单线服务器和双线服务器之间有什么区别呢?接下来就让小万来为大家具体分析一下吧! 首先单线服务器和双线服务器之间运营商的性质是不同的,单线服务器主要是一家带宽运营商,而双线服务器则是有两家运营商提供带宽的线路。 单线服务…

spring两种代理方式

Spring 提供了两种主要的代理(proxy)方式,分别是基于JDK动态代理和基于CGLIB的代理。这两种代理方式各有其特点和适用场景。 1. JDK动态代理 特点: - 基于Java的接口(Interface)。 - 代理类必须实现一个或…

contos7使用docker安装vulhub

contos7下使用docker安装vulhub 1. 安装docker 1. 更新yum (1)切换root用户 su root (2)更新yum yum update 2. 卸载旧版本的docker sudo yum remove docker sudo yum remove docker-client sudo yum remove docker-clien…