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

提供五屏网站建设黑牛网站建设

提供五屏网站建设,黑牛网站建设,网站服务器租用售价,网站seo排名公司Java 动态代理实现 一、JDK动态代理二、CGLIB动态代理三、动态代理的应用场景四、JDK代理与CGLIB代理比较 动态代理是Java中一种强大的技术,它允许在运行时创建代理对象,用于拦截对目标对象的方法调用。 一、JDK动态代理 JDK动态代理是Java标准库提供的代…

Java 动态代理实现

  • 一、JDK动态代理
  • 二、CGLIB动态代理
  • 三、动态代理的应用场景
  • 四、JDK代理与CGLIB代理比较

动态代理是Java中一种强大的技术,它允许在运行时创建代理对象,用于拦截对目标对象的方法调用。

一、JDK动态代理

JDK动态代理是Java标准库提供的代理实现,基于接口。

  1. 定义接口
interface UserService {void addUser(String name);
}
  1. 实现接口
class UserServiceImpl implements UserService {@Overridepublic void addUser(String name) {System.out.println("添加用户" + name);}
}
  1. 实现InvocationHandler
class UserServiceInvocationHandler implements InvocationHandler {private Object target;public UserServiceInvocationHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("--- 前置处理 ---");Object result = method.invoke(target, args);System.out.println("--- 后置处理 ---");return result;}
}
  1. 创建代理
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class JdkProxyDemo {public static void main(String[] args) {UserService userService = new UserServiceImpl();UserServiceInvocationHandler invocationHandler = new UserServiceInvocationHandler(userService);UserService proxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(),userService.getClass().getInterfaces(), invocationHandler);proxy.addUser("张三");}
}

jdk

二、CGLIB动态代理

当目标类没有实现接口时,可以使用CGLIB库实现动态代理。

  1. 添加CGLIB依赖(Maven)
<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>
  1. 目标类(不需要实现接口)
class ProductService {public void addProduct(String name) {System.out.println("添加产品: " + name);}
}
  1. 方法拦截器
class ProductMethodInterceptor implements MethodInterceptor {@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println("--- 前置处理 ---");// 调用父类方法Object result = proxy.invokeSuper(obj, args);System.out.println("--- 后置处理 ---");return result;}
}
  1. 创建代理
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;public class CglibProxyDemo {public static void main(String[] args) {ProductMethodInterceptor interceptor = new ProductMethodInterceptor();Enhancer enhancer = new Enhancer();enhancer.setSuperclass(ProductService.class);enhancer.setCallback(interceptor);ProductService proxy = (ProductService) enhancer.create();proxy.addProduct("手机");}
}

cglib

三、动态代理的应用场景

  1. AOP编程:如Spring的AOP功能
  2. 远程方法调用:如RPC框架
  3. 事务管理
  4. 日志记录
  5. 权限控制
  6. 性能监控

四、JDK代理与CGLIB代理比较

特性JDK动态代理CGLIB动态代理
基于接口
性能创建快,运行慢创建慢,运行快
限制只能代理接口不能代理final类和方法
依赖Java内置需要第三方库
实现原理反射字节码生成

在Spring框架中,如果目标对象实现了接口,默认使用JDK动态代理,否则使用CGLIB代理。


文章转载自:

http://9chUbZCw.cgntj.cn
http://yjkuIxXo.cgntj.cn
http://P2BIDZXz.cgntj.cn
http://frbFlW0L.cgntj.cn
http://2xi3cfTZ.cgntj.cn
http://AH2nZFg3.cgntj.cn
http://H8EZEOO9.cgntj.cn
http://bFTcuyMx.cgntj.cn
http://fQbPVCOw.cgntj.cn
http://0Yt4vwpT.cgntj.cn
http://mvVZ0tTZ.cgntj.cn
http://bGwEaeWs.cgntj.cn
http://VAuZTx4H.cgntj.cn
http://oe7QycyI.cgntj.cn
http://HRfiDMTo.cgntj.cn
http://Xeba1Id2.cgntj.cn
http://yCG5RL4b.cgntj.cn
http://HAUwwEJ8.cgntj.cn
http://yHRXCkgL.cgntj.cn
http://2vi82EFu.cgntj.cn
http://mEVVZVNh.cgntj.cn
http://N1jZErGu.cgntj.cn
http://ts598DEh.cgntj.cn
http://Mna830c5.cgntj.cn
http://wECFp4gJ.cgntj.cn
http://lNszbYO2.cgntj.cn
http://618wQ0mS.cgntj.cn
http://sjRniPLX.cgntj.cn
http://VlHWYGcv.cgntj.cn
http://TaoL5Crq.cgntj.cn
http://www.dtcms.com/wzjs/618556.html

相关文章:

  • python网站开发视频教程网站开发最适合语言
  • 做图表的网站 免费天津差旅管家商旅服务有限公司
  • 网站开发的推荐wordpress5添加alt属性
  • 手袋 技术支持 东莞网站建设ppt设计器在哪里
  • seo网站建设微wordpress前台压缩图片
  • 重庆网站seo技术湖南门户网站建设
  • 做网站考什么赚钱网站设计设
  • 南京网站建设耐油橡胶板球场 技术支持 东莞网站建设
  • 四川城乡建设网站证件查询微网站开发多少钱
  • 大学网站建设说明书企业做网站和宣传册的作用
  • 废旧电脑做网站服务器微信开放平台开发文档
  • 分类网站发布信息有生意做吗做家教什么网站比较好
  • 代理厦门网站设计公司什么是网络营销?网络营销有什么特点?
  • 深圳住房建设局官方网站windows wordpress固定链接
  • 怎么做黑客把网站余额更改百度收录排名好的网站
  • 网站菜单设置怎么样才能找到网站后台网址
  • 电子商务网站建设及推广方案网络推广公司运营
  • 上海做网站的的公司有哪些镇江网站建设制作公司
  • 佛山网站改版薇晓朵 WordPress 国内项目计划
  • seosem是什么职位网络seo哈尔滨
  • 北京网站建设解决方案网页开发人员招聘
  • 境外网站服务器网站建设程序代码
  • 莱芜网站优化是什么seo网站提交
  • 网站开发培训深圳网站图片一般的像素
  • 网站运营主要是做什么响应式网站建设企业
  • 东莞常平做网站网络营销方式和方法
  • 中国空间站机械臂内蒙古互联网公司哪里最多
  • 建网站后如何运营网页设计师考证试题
  • 品牌网站建设黑白H狼网页设计论文的研究内容
  • 合肥网站建设晨飞php网页制作代码