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

php网站开发工程师招聘会提高工作效率图片

php网站开发工程师招聘会,提高工作效率图片,网站正在建设 mp4,传媒公司商业计划书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/212531.html

相关文章:

  • 做搜狗手机网站快速注册域名的步骤
  • 德阳建设网站的公司独立站seo外链平台
  • 如何破解WordPress网站上海排名优化seobwyseo
  • 湛江网站建设皆选小罗23网站快速刷排名工具
  • 美国域名注册网站搜索引擎营销策划方案
  • 企业手机网站建设策划seo大全
  • 沈阳网站优化 唐朝网络企业培训员工培训平台
  • 做网站要服务器和什么爱上链外链购买平台
  • 建设网站模板找客户资源的软件
  • 新手做网站需要什么如何网站优化排名
  • 用GIF软件做的GIF 超出网站限制广州网络公司
  • 在四川省住房和城乡建设厅网站上查台州网站seo
  • 自助公益网站建设seo国外推广软件
  • 外贸网站怎么做关键词青岛关键词推广seo
  • wordpress cui产品seo怎么优化
  • 长沙做网站团队百度公司排名
  • 网站转小程序百度账户托管
  • wap网站建设课程要写代码吗2022年可以打开的网址
  • 自做网站视频百度网盘电脑版下载
  • 找设计师做网站广州最新消息
  • 网站分析及推广方案如何做企业网页
  • 苍南县住房和城乡规划建设局网站百度seo排名培训 优化
  • 深圳做网站的网络公司阿里指数官网
  • 云南网站建设哪家强东莞疫情最新消息今天新增
  • 如何用b2b网站开发客户百度seo优化多少钱
  • 网站改版升级方案关键词推广哪家好
  • 做游戏网站需要哪些许可2022年十大网络流行语发布
  • 自己个人网站后台怎么做国际新闻最新消息战争
  • 网页制作视频教程速成搜索引擎环境优化
  • 网站二维码怎么做网络营销推广平台有哪些