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

外贸网站建设模板下载金蝶官网首页

外贸网站建设模板下载,金蝶官网首页,网络营销的定义与特点,口碑好的网站建设平台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://www.dtcms.com/wzjs/582871.html

相关文章:

  • 做标签网站邀请码数控机械加工网
  • 网站排名优化推广厦门网站建设策划ppt
  • 毕设做网站答辩稿建设银行 网站 字体
  • 电子商务网站建设与管理课程的意义杭州建设网官方网站
  • 做网站需要的条件软件需求分析文档范例
  • php框架做网站17网一起做网店潮汕
  • 网站建设与网页制作案例教程食品包装设计要点
  • 阿里云网站建设9元乔拓云智能建站系统官网
  • asp网站 访问 变慢 监测合肥建设官方网站
  • 模板网站官网潍坊网站建设seo
  • 福建厦门网站建设公司深圳网站设计 工作室
  • 网站提示宏简述网站建设的基本思路
  • 济南网站建设服务商重庆工商学校官网
  • 专业模板建站服务百度收录情况查询
  • 公司网站别人做的怎么签合同网站建设与网页制作案例
  • 马鞍山网站建设 明达建设信用卡激活中心网站
  • 企业产品网站模板南通小程序制作
  • 网站大全浏览器网站做用户登录
  • 网站建设方案书 百度文库沈阳网站建设服务
  • 工信部网站备案号不同类型网站优势
  • 网站功能项目报价画图在什么网站上做兼职
  • 不同类型网站比较及网站域名设计网站做广告费用
  • 建立网站 用英语wordpress网站调用导航菜单
  • 市中移动网站建设四川城乡建设网站证件查询
  • 大型建设工程类考试辅导网站镇江网站建设和优化推广多少钱
  • 网站开发php支付接口企业网站建设周期
  • 网站开发及服务器总共多少钱wordpress添加文件
  • 网站做好后多用户电商平台
  • 预定型网站有哪些网络服务费税收分类编码
  • iis做外网站点爱客crm软件