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

php网站开发工程师招聘会数据营销

php网站开发工程师招聘会,数据营销,网站内页制作,wordpress副标题字数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/301255.html

相关文章:

  • 怎么办理营业执照网站优化排名推荐
  • 手机网站js电话悬浮优秀网页设计
  • 网站开发实验室建设方案百度广告平台电话
  • 哪些企业网站做得好网站群发软件
  • 设置网站维护页面深圳短视频seo教程
  • 北京市城乡和建设规委官方网站360关键词推广
  • 企业快速建站系统有必要买优化大师会员吗
  • 福州 网站备案优化公司组织架构
  • 网站建设工程师 html5微信朋友圈广告投放
  • 性做爰网站促销策略的四种方式
  • 国内优秀个人网站欣赏百度小说搜索排行榜
  • 中国电信网上营业厅天津百度网站排名优化
  • WordPress多站點支付插件长春网站推广排名
  • 网页设计师主要是做什么的呢seo如何快速出排名
  • 个人网站备案名称举例百度应用商店下载安装
  • 小区媒体网站建设搜索引擎国外
  • 企业检索网站建设软文营销的本质
  • 最简约的网站天机seo
  • 名词解释 网站内容百度商家入驻怎么做
  • wordpress nginx gzipseo诊断书案例
  • 工商企业登记查询珠海百度关键词优化
  • 国内最大的网站建设公司排名网站制作企业
  • js网站登录怎么做优化大师官网
  • 网站策划的内容有那些中国最近新闻大事件
  • 微信公众号登录入口在哪信息流优化师职业规划
  • 公司网站建设内容建议北京百度推广官网首页
  • 网站域名在哪看衡阳seo优化报价
  • 公安备案网站首页连云港seo
  • 苗木门户网站模板网站优化流程
  • 凡科真的是免费做企业网站各大引擎搜索入口