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

做网站能不能赚钱/电脑系统优化软件哪个好用

做网站能不能赚钱,电脑系统优化软件哪个好用,国家建设厅官方网站,域名注册平台的网站怎么做JDK 动态代理和 CGLIB 动态代理是 Spring AOP 以及许多 Java 框架中常见的两种动态代理方式,它们在实现方式、使用场景和性能上有所不同。 1. JDK 动态代理 特点 依赖 java.lang.reflect.Proxy 和 InvocationHandler 进行代理只能代理接口,不能直接代…

JDK 动态代理和 CGLIB 动态代理是 Spring AOP 以及许多 Java 框架中常见的两种动态代理方式,它们在实现方式、使用场景和性能上有所不同。

1. JDK 动态代理

特点

  • 依赖 java.lang.reflect.ProxyInvocationHandler 进行代理
  • 只能代理接口,不能直接代理具体类
  • 基于 Java 反射,在运行时生成代理类

实现方式

  1. 目标类必须实现 接口
  2. 使用 Proxy.newProxyInstance() 生成代理对象
  3. 代理方法调用时,委托给 InvocationHandler 处理

示例

import java.lang.reflect.*;interface Service {void doSomething();
}class RealService implements Service {public void doSomething() {System.out.println("真实业务逻辑执行");}
}class MyInvocationHandler implements InvocationHandler {private final Object target;public MyInvocationHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("JDK 代理 - 方法执行前");Object result = method.invoke(target, args);System.out.println("JDK 代理 - 方法执行后");return result;}
}public class JDKProxyTest {public static void main(String[] args) {Service target = new RealService();Service proxy = (Service) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new MyInvocationHandler(target));proxy.doSomething();}
}

运行结果

JDK 代理 - 方法执行前
真实业务逻辑执行
JDK 代理 - 方法执行后

优缺点

优点:

  • 基于 JDK 反射,不依赖第三方库,性能较稳定
  • 避免类加载问题(无需操作字节码)
  • 支持多个接口的代理

缺点:

  • 只能代理接口,不能代理普通类
  • 性能比 CGLIB 稍低(JDK 代理基于反射,CGLIB 直接使用字节码增强)

2. CGLIB 动态代理

特点

  • 依赖 ASM 字节码技术,通过继承目标类创建子类代理
  • 可以代理普通类(不需要实现接口)
  • 基于子类代理,无法代理 final 类或 final 方法

实现方式

  1. 目标类不需要接口
  2. CGLIB 生成子类代理对象
  3. 拦截方法调用并增强逻辑

示例

import net.sf.cglib.proxy.*;class RealService {public void doSomething() {System.out.println("真实业务逻辑执行");}
}class MyMethodInterceptor implements MethodInterceptor {@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println("CGLIB 代理 - 方法执行前");Object result = proxy.invokeSuper(obj, args);System.out.println("CGLIB 代理 - 方法执行后");return result;}
}public class CGLIBProxyTest {public static void main(String[] args) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(RealService.class);enhancer.setCallback(new MyMethodInterceptor());RealService proxy = (RealService) enhancer.create();proxy.doSomething();}
}

运行结果

CGLIB 代理 - 方法执行前
真实业务逻辑执行
CGLIB 代理 - 方法执行后

优缺点

优点:

  • 可以代理普通类,不要求实现接口
  • 性能比 JDK 代理更高(直接操作字节码,无需反射)

缺点:

  • 无法代理 final 类和 final 方法
  • 生成代理类耗时更长(类字节码需要动态修改)
  • 需要额外依赖 CGLIB(Spring 3.2 以前),Spring 4+ 自带 ByteBuddy 作为替代

3. JDK 动态代理 vs CGLIB

对比项JDK 动态代理CGLIB 动态代理
实现方式反射(Proxy + InvocationHandler继承(字节码增强 Enhancer
是否需要接口需要(只能代理接口)不需要(可代理普通类)
性能反射调用,性能略低直接调用字节码,性能更高
是否支持 final 类支持不支持
Spring AOP 代理方式默认使用(若有接口)无接口时使用
应用场景代理接口服务(如 RPC、Spring AOP)需要代理普通类(如 MyBatis)

4. Spring AOP 选择哪种代理?

Spring AOP 默认选择 JDK 动态代理,除非目标类没有实现接口,才会使用 CGLIB:

  • 有接口 → JDK 代理(默认)
  • 无接口 → CGLIB 代理

如果希望 Spring 强制使用 CGLIB,可以:

@EnableAspectJAutoProxy(proxyTargetClass = true)

5. 总结

  • JDK 动态代理:基于反射,只能代理接口,适用于接口驱动的场景。
  • CGLIB 动态代理:基于字节码增强,可以代理普通类,性能更优,但不能代理 final 类和 final 方法。
  • Spring AOP:默认优先使用 JDK 代理,只有当目标类没有实现接口时才使用 CGLIB。

在实际开发中:

  • 如果业务主要是接口编程(如 Service 层),JDK 代理更合适
  • 如果需要代理普通类(如工具类),CGLIB 是更好的选择

两者各有优势,选择合适的方式能提升代理的效率和可维护性。

http://www.whsansanxincailiao.cn/news/30240444.html

相关文章:

  • 哪个网站可以预约做头发的/口碑营销方案
  • 黔江网站建设/杭州关键词自动排名
  • 网站自适应 如何做/线下营销方式主要有哪些
  • dede网站源码下载/百度账号客服
  • 网站建设套餐有哪些/竞价托管外包哪家好
  • 网站建设建网站/亚马逊关键词排名查询工具
  • 石家庄网站建设招商/百度百科创建
  • 电影网站建设需要多少钱/网站排名怎么做上去
  • 公司注册流程及条件/南昌网优化seo公司
  • 外贸b2c商城网站建设/百度一下电脑版
  • 有男女做暖暖的视频网站/app下载
  • 拖拽网站怎么做的/app拉新一手渠道
  • 做奥网站/澳门seo关键词排名
  • 电子商务网站建设实训室简介/河北搜索引擎优化
  • 58同城商业后台如何做网站/谷歌play商店
  • 武汉哪家做网站/输入搜索内容
  • 企业网站keywords最多几个/天津百度seo
  • 网站制作哪家大/网络营销技能大赛优秀作品
  • 微网站功能列表/网络广告策划书模板范文
  • 马鞍山网站建设公司排名/sem营销是什么意思
  • 龙华哪有做网站设计/杭州网站推广找哪家
  • 网站建设周记/企业营销网站建设系统
  • 金泉网做网站/百度推广手机app下载
  • 百度统计 网站速度诊断/互联网广告精准营销
  • 武汉做手机网站/超链接友情外链查询
  • 网站建设培训速成/优化营商环境心得体会2023
  • 广东哪家网站建设哪家公司好/seo关键词首页排名代发
  • 网站开发概要设计书模板/知名的建站公司
  • 做网站的计划/app软件推广怎么做
  • 装饰公司网站建设方案/旅游网络营销的渠道有哪些