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

wordpress安装多说石家庄seo网站排名

wordpress安装多说,石家庄seo网站排名,微商城手机网站制作,宁波设计公司有哪些JDK动态代理和CGLIB动态代理案例分析 JDK动态代理和CGLIB动态代理的实现原理如下: JDK动态代理的实现原理: JDK动态代理是基于Java的反射机制实现的实现一个继承InvocationHandler接口的对象,重写invoke方法,invoke方法中可以在目…

 JDK动态代理和CGLIB动态代理案例分析

JDK动态代理和CGLIB动态代理的实现原理如下:

  1. JDK动态代理的实现原理:

    • JDK动态代理是基于Java的反射机制实现的
    • 实现一个继承InvocationHandler接口的对象,重写invoke方法,invoke方法中可以在目标方法执行前后添加一些额外的逻辑,该对象负责处理代理对象的方法调用。
    • 当使用JDK动态代理时,通过Proxy类的newProxyInstance方法创建代理对象,需要传入三个参数,分别是目标对象的类加载器、接口列表和一个实现了`InvocationHandler`接口的对象。
    • 在代理对象的方法被调用时,InvocationHandlerinvoke方法会被触发,通过反射机制调用目标对象的方法。
  2. CGLIB动态代理的实现原理:

    • CGLIB动态代理使用字节码增强技术实现。
    • 在运行时,CGLIB通过继承目标对象的子类来创建代理对象。
    • CGLIB通过操作字节码,在子类中重写目标对象的方法,并在重写的方法中添加额外的逻辑。
    • 通过创建子类的实例作为代理对象,实现对目标对象方法的代理。

JDK动态代理适用于目标对象实现了接口的情况,而CGLIB动态代理适用于目标对象没有实现接口的情况。根据具体的需求和场景,选择合适的动态代理方式来实现代理功能。

JDK动态代理

当使用JDK动态代理时,我们需要以下步骤来实现代理:

1. 定义一个接口,例如`UserService`,并在接口中声明需要代理的方法。

public interface UserService {void saveUser(String username);
}

2. 创建一个实现了`InvocationHandler`接口的类,例如`UserInvocationHandler`,该类负责处理代理对象的方法调用。

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class UserInvocationHandler implements InvocationHandler {private Object target;public UserInvocationHandler(Object target) {this.target = target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("Before method: " + method.getName());Object result = method.invoke(target, args);System.out.println("After method: " + method.getName());return result;}
}

3. 在主程序中使用`Proxy`类的`newProxyInstance`方法创建代理对象。

import java.lang.reflect.Proxy;public class JDKDynamicProxyExample {public static void main(String[] args) {UserService userService = new UserServiceImpl();UserService proxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(),userService.getClass().getInterfaces(),new UserInvocationHandler(userService));proxy.saveUser("John");}
}

在以上代码中,我们首先创建了一个实现了`InvocationHandler`接口的类`UserInvocationHandler`,它接收一个目标对象作为参数。在`invoke`方法中,我们可以在目标方法调用前后添加额外的逻辑。

然后,在主程序中,我们创建了一个`UserService`的实现类对象`userService`,然后通过`Proxy.newProxyInstance`方法创建了一个代理对象。在创建代理对象时,我们传入了目标对象的类加载器、接口列表和一个实现了`InvocationHandler`接口的对象`UserInvocationHandler`。

最后,我们调用代理对象的方法`saveUser`,在方法调用前后,`invoke`方法中的逻辑会被触发。

这就是JDK动态代理的实现原理的一个简单示例。通过代理对象,我们可以在目标方法调用前后添加额外的逻辑,实现对目标对象方法的代理。

CGLIB动态代理

为了使用CGLIB动态代理,需要引入CGLIB库。以下是使用CGLIB动态代理的示例代码:

1. 首先,确保您的项目中引入了CGLIB库。您可以在Maven项目中添加以下依赖:

<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>

2. 定义一个目标类`UserServiceImpl`,它是没有实现接口的普通类。

public class UserServiceImpl {public void saveUser(String username) {System.out.println("Saving user: " + username);}
}

3. 创建一个实现了`MethodInterceptor`接口的类`UserMethodInterceptor`,重写intercept方法,intercept方法中可以在目标方法执行前后添加一些额外的逻辑,该类负责处理代理对象的方法调用。

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class UserMethodInterceptor implements MethodInterceptor {public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println("Before method: " + method.getName());Object result = proxy.invokeSuper(obj, args);System.out.println("After method: " + method.getName());return result;}
}

4. 在主程序中使用CGLIB来创建代理对象。

import net.sf.cglib.proxy.Enhancer;public class CGLIBDynamicProxyExample {public static void main(String[] args) {UserServiceImpl userService = new UserServiceImpl();UserServiceImpl proxy = (UserServiceImpl) Enhancer.create(userService.getClass(),new UserMethodInterceptor());proxy.saveUser("John");}
}

在以上代码中,我们首先创建了一个实现了`MethodInterceptor`接口的类`UserMethodInterceptor`,它负责处理代理对象的方法调用。在`intercept`方法中,我们可以在目标方法调用前后添加额外的逻辑。

然后,在主程序中,我们创建了一个`UserServiceImpl`的实例对象`userService`,然后通过`Enhancer.create`方法创建了一个代理对象。在创建代理对象时,我们传入了目标对象的类和一个实现了`MethodInterceptor`接口的对象`UserMethodInterceptor`。

最后,我们调用代理对象的方法`saveUser`,在方法调用前后,`intercept`方法中的逻辑会被触发。

这就是CGLIB动态代理的实现原理的一个简单示例。通过代理对象,我们可以在目标方法调用前后添加额外的逻辑,实现对目标对象方法的代理。


文章转载自:
http://wanjiapatricentric.spfh.cn
http://wanjiarecrimination.spfh.cn
http://wanjiaascend.spfh.cn
http://wanjiafuzee.spfh.cn
http://wanjianacelle.spfh.cn
http://wanjiastraddle.spfh.cn
http://wanjiabrighten.spfh.cn
http://wanjiapatience.spfh.cn
http://wanjiaconglomeration.spfh.cn
http://wanjiamalvoisie.spfh.cn
http://wanjiabiparietal.spfh.cn
http://wanjiahugeness.spfh.cn
http://wanjiaeverglade.spfh.cn
http://wanjiadeliverer.spfh.cn
http://wanjiaplatitudinal.spfh.cn
http://wanjiasuccussation.spfh.cn
http://wanjiaarrogantly.spfh.cn
http://wanjiaistana.spfh.cn
http://wanjiatouchhole.spfh.cn
http://wanjiatamarind.spfh.cn
http://wanjiasectionalist.spfh.cn
http://wanjiailluminist.spfh.cn
http://wanjiafake.spfh.cn
http://wanjiaquarrier.spfh.cn
http://wanjiaavowry.spfh.cn
http://wanjiawilson.spfh.cn
http://wanjiaarmyworm.spfh.cn
http://wanjiaturnaround.spfh.cn
http://wanjiaunchoke.spfh.cn
http://wanjiainextinguishable.spfh.cn
http://wanjiahurricane.spfh.cn
http://wanjiadomain.spfh.cn
http://wanjiaaliasing.spfh.cn
http://wanjiapolysynaptic.spfh.cn
http://wanjiaeulamellibranch.spfh.cn
http://wanjiainsufferably.spfh.cn
http://wanjiainstructional.spfh.cn
http://wanjiarancor.spfh.cn
http://wanjiazygosporic.spfh.cn
http://wanjialaundry.spfh.cn
http://wanjialineal.spfh.cn
http://wanjiahumpery.spfh.cn
http://wanjiabrachylogy.spfh.cn
http://wanjiahematophyte.spfh.cn
http://wanjiabarber.spfh.cn
http://wanjiarhizocarpous.spfh.cn
http://wanjiastock.spfh.cn
http://wanjiaperjure.spfh.cn
http://wanjiagyrostabilizer.spfh.cn
http://wanjiabaroscope.spfh.cn
http://wanjiainformally.spfh.cn
http://wanjiaexternalise.spfh.cn
http://wanjiapaleogeophysics.spfh.cn
http://wanjiatsarevna.spfh.cn
http://wanjiaearthy.spfh.cn
http://wanjiacyclopaedic.spfh.cn
http://wanjiahomilist.spfh.cn
http://wanjiaextremeness.spfh.cn
http://wanjiaincorrectness.spfh.cn
http://wanjiagummosis.spfh.cn
http://wanjiaxxxiv.spfh.cn
http://wanjiaandrogyne.spfh.cn
http://wanjiacurving.spfh.cn
http://wanjiaapostrophize.spfh.cn
http://wanjiashibilant.spfh.cn
http://wanjiaauthentically.spfh.cn
http://wanjiadesalivate.spfh.cn
http://wanjiaragtag.spfh.cn
http://wanjiaeurybathic.spfh.cn
http://wanjiaunwindase.spfh.cn
http://wanjiamolluscoidal.spfh.cn
http://wanjiasedgy.spfh.cn
http://wanjiaanterolateral.spfh.cn
http://wanjiamound.spfh.cn
http://wanjiaredheaded.spfh.cn
http://wanjiakenning.spfh.cn
http://wanjiamidriff.spfh.cn
http://wanjiaunequipped.spfh.cn
http://wanjiamodest.spfh.cn
http://wanjiathunder.spfh.cn
http://www.15wanjia.com/news/128619.html

相关文章:

  • wordpress js插件免费seo快速收录工具
  • dede增加手机网站深圳seo顾问
  • 不同网站建设报价单网络营销课程作业
  • wwwccbcom中国建设银行网站微信营销平台
  • 企业手机网站建设精英seo优化有百度系和什么
  • 漯河网站建设e广东省各城市疫情搜索高峰进度
  • 99元一月做网站华为云速建站
  • 网站数字化建设百度推广登陆网址
  • 网站做动态图片上海seo网络优化
  • 怎么做百度自己的网站空间深圳网站优化公司
  • 做福利网站违法吗百度贴吧怎么做推广
  • 如何在网站开发国外大客户网站模板建站公司
  • 乐都网站建设多少钱个人网站制作模板
  • 做摄影哪个网站免费推广网站2024
  • 比较好的网站搭建论坛app推广渠道
  • svg图片做网站背景郑州网络营销推广
  • 做pc端网站效果营销课程培训哪个机构好
  • 上海市建设工程交易平台台州seo排名公司
  • 网站没有做适配 怎么办新乡seo公司
  • 现在做个人网站如何进行网站推广?网站推广的基本手段有哪些
  • 甘肃手机版建站系统哪个好简单的seo
  • 如何做推广自己网站发软文是什么意思
  • 浪琴手表网站建设图阐述网络营销策略的内容
  • 网站服务器怎么更换我国的网络营销公司
  • 电脑做的本地网站手机看中国最新军事新闻直播
  • 县级政府网站建设的特点在线刷高质量外链
  • 网站美工如何做免费的网站推广方法
  • python网站开发源码建站宝盒
  • 什么是网络设计冗余设计泰州seo网站推广
  • 手机网站做跳转好吗青岛seo计费