基于MAVEN项目的CGLib动态代理原理及实现

您所在的位置:网站首页 如何写java动态代理 基于MAVEN项目的CGLib动态代理原理及实现

基于MAVEN项目的CGLib动态代理原理及实现

2024-07-17 21:50:00| 来源: 网络整理| 查看: 265

在这里插入图片描述

基于MAVEN项目的CGLib动态代理原理及实现 前言一、什么是CGLib二、实现过程2.1导包2.2创建cglib代理类2.3创建目标类2.4编写测试类2.5运行结果2.6创建的代理类 三、实现原理

前言

在学习spring框架时,我们会学习AOP。实现AOP的底层原理中有JDK动态代理和CGLib代理。今天我们来学习一下CGLib。

一、什么是CGLib

CGLib是一个强大的、高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。Hibernate支持它来实现PO(Persistent Object 持久化对象)字节码的动态生成。 其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。例如Spring AOP为他们提供方法的interception(拦截)。 CGLib采用底层的字节码技术ASM, 可以为一个类创建子类, 在子类中采用方法拦截的技术拦截所有父类方法的调用, 并织入横切逻辑。

二、实现过程 2.1导包

在pom.xml中导入cglib包

cglib cglib 3.3.0 2.2创建cglib代理类

代理类需要实现MethodInterceptor接口并重写intercept方法

import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class MyProxy implements MethodInterceptor { /** * * @param o cglib生成的代理对象 * @param method 被代理对象的方法 * @param objects 传入方法的参数 * @param methodProxy 代理的方法 * @return * @throws Throwable */ public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("这里可以插入执行关键代码之前的逻辑"); Object o1 = methodProxy.invokeSuper(o, objects);//关键代码: System.out.println("这里可以插入执行关键代码之后的逻辑"); return o1; } } 2.3创建目标类 public class User { public String say(String msg){ System.out.println("早上好"+msg); return msg; } } 2.4编写测试类 import net.sf.cglib.core.DebuggingClassWriter; import net.sf.cglib.proxy.Enhancer; public class Demo { public static void main(String[] args) { // 代理类class文件存入本地磁盘方便我们反编译查看源码 System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\code"); Enhancer enhancer = new Enhancer(); // 通过CGLIB动态代理获取代理对象的过程 enhancer.setSuperclass(User.class); // 设置enhancer对象的父类 enhancer.setCallback(new MyProxy()); // 设置enhancer的回调对象 User user = (User) enhancer.create(); // 创建代理对象 String world = user.say("world"); // 通过代理对象调用目标方法 System.out.println(world); } } 2.5运行结果

在这里插入图片描述

2.6创建的代理类

class文件存入本地磁盘 在这里插入图片描述

三、实现原理

CGLib采用底层的字节码技术ASM, 可以为一个类创建子类, 在子类中采用方法拦截的技术拦截所有父类方法的调用, 并织入横切逻辑。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭