当前位置: 首页 > news >正文

如何做个网站做cpa云南网站建设招商

如何做个网站做cpa,云南网站建设招商,网站建设域名的购买,wordpress忘记密码函数文章目录 前言技术积累核心概念主要功能适用场景与JDK动态代理的对比 实战演示定义待代理的目标类实现MethodInterceptor接口使用代理对象 测试结果写在最后 前言 在Java编程中#xff0c;CGLIB (Code Generation Library) 是一个强大的高性能代码生成库#xff0c;它通过生… 文章目录 前言技术积累核心概念主要功能适用场景与JDK动态代理的对比 实战演示定义待代理的目标类实现MethodInterceptor接口使用代理对象 测试结果写在最后 前言 在Java编程中CGLIB (Code Generation Library) 是一个强大的高性能代码生成库它通过生成被代理类的子类来实现代理功能。相比于JDK动态代理要求目标对象必须实现接口CGLIB代理适用于那些没有实现任何接口的类。其实动态代理在编码中有很多的使用场景如方法拦截、权限检查、事务管理、日志记录等等。今天我们就简单分享一期用CGLIB动态代理来扩展类功能。 技术积累 核心概念 动态代理 动态代理是一种设计模式允许在运行时创建一个对象该对象可以充当其他对象目标对象的代理从而控制对目标对象方法的访问。代理对象在转发请求到目标对象的同时可以附加额外的行为如方法拦截、权限检查、事务管理、日志记录等。字节码操作 CGLIB基于底层的字节码操作技术利用ASM库动态生成新的Java类通常是目标类的子类。这些新生成的类继承自目标类并在方法调用时插入代理逻辑。这种机制使得CGLIB能够在不修改原有类代码的情况下为其提供增强功能 主要功能 方法拦截 CGLIB的核心功能是实现方法级别的拦截。通过实现MethodInterceptor接口开发者可以定义一个方法拦截器该拦截器会在代理对象的方法调用前后执行自定义逻辑如预处理、后处理、异常处理、结果修饰等。非接口代理 与JDK动态代理依赖接口不同CGLIB可以直接对未实现任何接口的普通Java类进行代理。这意味着无论目标类是否声明了接口都可以使用CGLIB进行代理极大地拓宽了其适用范围。性能优化 虽然字节码操作会带来一定的开销但CGLIB通过高效地生成和缓存代理类确保了在大多数情况下具有良好的性能。尤其对于频繁创建和销毁代理对象的场景CGLIB的单例模式表现往往优于JDK动态代理。 适用场景 AOP框架 面向切面编程Aspect-Oriented Programming, AOP常借助CGLIB来实现方法拦截和织入切面逻辑。Spring框架在内部就集成了CGLIB用于当目标对象未实现接口时的代理实现。服务端框架 在某些服务端开发框架如Hibernate、MyBatis等中CGLIB被用来创建持久化对象的代理以透明地支持延迟加载、变更检测等功能。测试工具 在单元测试或集成测试中CGLIB可用于模拟复杂的对象交互为测试提供灵活的隔离环境。 与JDK动态代理的对比 尽管两者都服务于动态代理需求但CGLIB与JDK动态代理有明显的差异 代理方式 JDK动态代理基于接口创建代理对象时需要目标对象实现至少一个接口。代理对象是接口的实现类通过反射调用接口方法。 CGLIB代理基于子类能够代理未实现接口的类。代理对象是目标类的子类通过继承和方法覆写实现拦截。性能考量 对于仅需代理接口方法且创建代理对象频率较低的场景JDK动态代理通常拥有更好的性能因为它不需要生成额外的类文件也不涉及字节码操作。 在需要代理非接口类或频繁创建销毁代理对象的情况下CGLIB由于其高效的字节码生成和缓存策略可能会表现出更优的性能。应用限制 JDK动态代理由于依赖接口无法应用于未声明接口的类。同时对于final类和方法以及带有final修饰符的成员变量JDK动态代理无能为力。 CGLIB理论上可以代理任何非final类但对于final类、final方法以及构造函数CGLIB同样无法进行代理。 实战演示 定义待代理的目标类 首先创建一个不实现任何接口的ActionUserDataServiceImpl 类它是我们将要进行CGLIB代理的实际业务逻辑实现。 /*** ActionUserDataServiceImpl* author senfel* version 1.0* date 2024/4/3 16:11*/ public class ActionUserDataServiceImpl {/*** addUser* author senfel* date 2024/4/3 16:36* return void*/public void addUser() {System.out.println(实际执行增加用户的操作...);} }实现MethodInterceptor接口 为了拦截并处理目标方法调用我们需要实现net.sf.cglib.proxy.MethodInterceptor接口其中的核心方法是intercept()。在这个方法中你可以添加额外的逻辑如前置处理、后置处理、异常处理或完全替换原有的方法行为。 import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method;/*** StudentProxy* author senfel* version 1.0* date 2024/4/3 16:27*/ public class MyCglibProxyT implements MethodInterceptor {/*** getProxyInstance* author senfel* date 2024/4/3 16:27* return java.lang.Object*/public Object getProxyInstance(ClassT tClass) {Enhancer enhancer new Enhancer();enhancer.setSuperclass(tClass);enhancer.setCallback(this); // 设置回调方法为当前类return enhancer.create();}Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println(开始执行代理逻辑...);// 前置处理或其他逻辑beforeProxyRun();// 调用原始方法即目标方法Object result proxy.invokeSuper(obj, args);// 后置处理或其他逻辑afterProxyRun();System.out.println(结束执行增代理逻辑...);return result;}/*** beforeProxyRun* author senfel* date 2024/4/3 16:33* return void*/private void beforeProxyRun() {System.out.println(代理前执行一些预处理操作...);}/*** afterProxyRun* author senfel* date 2024/4/3 16:33* return void*/private void afterProxyRun() {System.out.println(代理后执行一些后续处理操作...);} }使用代理对象 最后通过代理类的getProxyInstance()方法获取代理对象并调用其方法以观察代理效果。 import com.example.ccedemo.proxy.MyCglibProxy; import com.example.ccedemo.service.ActionUserDataServiceImpl;/*** CglibProxyTest* author senfel* version 1.0* date 2024/4/3 16:29*/ public class CglibProxyTest {public static void main(String[] args) {MyCglibProxyActionUserDataServiceImpl actionUserDataServiceMyCglibProxy new MyCglibProxy();ActionUserDataServiceImpl actionUserDataService (ActionUserDataServiceImpl)actionUserDataServiceMyCglibProxy.getProxyInstance(ActionUserDataServiceImpl.class);actionUserDataService.addUser();} }测试结果 开始执行代理逻辑… 代理前执行一些预处理操作… 实际执行增加用户的操作… 代理后执行一些后续处理操作… 结束执行增代理逻辑… 写在最后 以上就是一个完整的Java CGLIB动态代理实例。通过这个例子可以看到我们成功地对ActionUserDataServiceImpl 类进行了代理代理过程中插入了额外的前后置处理逻辑而无需修改原有类的代码。在实际使用时我们应根据项目需求和目标类特性选择合适的代理方案不仅仅限制于CGLIB如果有实现接口的类用JDK也可这样才能达到事半功倍的效果。
http://www.zqtcl.cn/news/591724/

相关文章:

  • 中国室内设计师联盟网站我注册过的网站
  • 如何给自己的公司做网站网站设计电商首页
  • 成都网站开发培训综合网站开发实训总结
  • 个人备案网站名称文学网站开发
  • 花钱做推广广告哪个网站好泗洪网页设计
  • 望牛墩镇网站建设公司网站建设企业熊掌号
  • 做网站一般会出现的问题静态网站的好处就是安全性好从而
  • 做海鲜代理在什么网站建筑网片钢筋网生产厂家
  • 万网网站建设方案书导购网站开发要多少钱
  • 做网站muse好还是DW好用wordpress %link
  • html5门户网站模版做投标需要知道什么网站
  • 合肥网站制作推广seo引擎搜索网站关键词
  • 陕西建设厅网站wordpress 不显示ip
  • 郑州外贸网站制作营销号视频生成器手机版
  • 绵阳市建设工程质量监督站网站wordpress的插件目录
  • 建设和管理环保网站西安做兼职网站设计
  • 在网站中写小说想要删除如何做婚纱摄影的网站怎么做
  • 重庆自适应网站建设wordpress添加icon文件
  • 目前小说网站排名适合网站设计的gif图片
  • 深圳建立网站wordpress 安装语言
  • 南京做中英文网站海南网站建设哪家专业
  • 做网站用jquerywordpress邮件有什么用
  • 上海网站建设免the 7 wordpress
  • 知名建站的公司微信企业app手机下载安装
  • 鹤山做网站羊毛网站建设视频
  • 图书类网站开发的背景建筑培训机构
  • 外贸网站建设制作wordpress管理员页面404
  • 北郊网站建设app网站开发哪里有
  • 像素人物制作网站网站开发的话术
  • 网站关键词怎么优化排名wordpress电子商城模板