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

东营市公司网站建设价格湛江网站制作建设

东营市公司网站建设价格,湛江网站制作建设,wordpress主题包安装,江浙沪做网站的公司jdk动态代理还是cglib代理#x1f9d9;jdk动态代理和cglib代理的示例JDK动态代理原理CGLIB代理final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理滚滚长江东逝水#xff0c;浪花淘尽英雄。——唐代杨炯《临江仙》 jdk动态代理和cglib代理的示例 以下是一个使用… jdk动态代理还是cglib代理jdk动态代理和cglib代理的示例JDK动态代理原理CGLIB代理final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理滚滚长江东逝水浪花淘尽英雄。——唐代杨炯《临江仙》 jdk动态代理和cglib代理的示例 以下是一个使用JDK动态代理和CGLIB代理的示例。我们首先创建一个接口和实现类然后分别使用JDK动态代理和CGLIB代理来创建代理对象。 接口UserService.java public interface UserService {void addUser(String name); } 实现类UserServiceImpl.java public class UserServiceImpl implements UserService {Overridepublic void addUser(String name) {System.out.println(Adding user: name);} } JDK动态代理JdkProxyHandler.java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class JdkProxyHandler implements InvocationHandler {private Object target;public JdkProxyHandler(Object target) {this.target target;}SuppressWarnings(unchecked)public T T getProxyInstance() {return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(JDK Proxy - Before method execution);Object result method.invoke(target, args);System.out.println(JDK Proxy - After method execution);return result;} } CGLIB代理CglibProxyHandler.java 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 CglibProxyHandler implements MethodInterceptor {private Object target;public CglibProxyHandler(Object target) {this.target target;}SuppressWarnings(unchecked)public T T getProxyInstance() {Enhancer enhancer new Enhancer();enhancer.setSuperclass(target.getClass());enhancer.setCallback(this);return (T) enhancer.create();}Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println(CGLIB Proxy - Before method execution);Object result proxy.invokeSuper(obj, args);System.out.println(CGLIB Proxy - After method execution);return result;} } 测试类ProxyTest.java public class ProxyTest {public static void main(String[] args) {UserService userService new UserServiceImpl();// 使用JDK动态代理JdkProxyHandler jdkProxyHandler new JdkProxyHandler(userService);UserService jdkProxy jdkProxyHandler.getProxyInstance();jdkProxy.addUser(John);System.out.println(------------------------------------);// 使用CGLIB代理CglibProxyHandler cglibProxyHandler new CglibProxyHandler(userService);UserService cglibProxy cglibProxyHandler.getProxyInstance();cglibProxy.addUser(Jane);} } 运行 ProxyTest.java你将看到以下输出 JDK Proxy - Before method execution Adding user: John JDK Proxy - After method execution ------------------------------------ CGLIB Proxy - Before method execution Adding user: Jane CGLIB Proxy - After method execution JDK动态代理和CGLIB代理都是AOP面向切面编程中的实现技术它们可以在不修改目标类代码的情况下为目标类添加一些额外的功能。 JDK动态代理原理 JDK动态代理是基于Java反射机制实现的。它主要使用了java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。 JDK动态代理的核心思想是为目标类创建一个代理对象这个代理对象实现了目标类的接口。当代理对象的方法被调用时实际上是调用了InvocationHandler的invoke方法。在invoke方法中我们可以在调用目标类方法之前和之后执行一些自定义的逻辑。 要使用JDK动态代理需要满足以下条件 目标类必须实现一个或多个接口。为目标类编写一个InvocationHandler实现类。 JDK动态代理的主要局限在于它只能代理实现了接口的类。如果一个类没有实现接口就无法使用JDK动态代理。 CGLIB代理 CGLIBCode Generation Library是一个第三方代码生成库它可以在运行时为目标类生成一个子类。CGLIB代理的核心思想是为目标类创建一个子类并覆盖目标类的方法。当代理类的方法被调用时实际上是调用了MethodInterceptor的intercept方法。在intercept方法中我们可以在调用父类即目标类方法之前和之后执行一些自定义的逻辑。 要使用CGLIB代理需要满足以下条件 目标类不能是final的因为CGLIB需要生成目标类的子类。为目标类编写一个MethodInterceptor实现类。 CGLIB代理的优势在于它不要求目标类实现接口但是由于它是通过创建子类来实现代理的所以目标类不能是final的。 JDK动态代理基于Java反射机制要求目标类实现接口。它创建的代理对象实现了目标类的接口并通过InvocationHandler来实现方法拦截。 CGLIB代理基于代码生成技术不要求目标类实现接口。它创建的代理对象是目标类的子类并通过MethodInterceptor来实现方法拦截。 两者都可以实现在不修改目标类代码的情况下为目标类添加额外功能。选择哪种代理方式取决于目标类是否实现了接口以及其他特殊需求。 final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理 如果目标类是final类且没有实现接口那么JDK动态代理和CGLIB代理都无法直接对其进行代理。JDK动态代理要求目标类实现一个或多个接口而CGLIB代理需要生成目标类的子类对于final类是无法创建子类的。 在这种情况下你可以考虑以下解决方案 修改目标类去除final修饰符或为其实现一个接口。然后你可以选择使用JDK动态代理或CGLIB代理。 如果不能修改目标类你可以尝试使用装饰器模式。创建一个新类实现与目标类相同的接口或扩展自目标类如果目标类不是final的并在新类中包装目标类。然后在新类中实现代理逻辑。这种方式虽然不能直接代理目标类但仍然可以在不修改目标类的情况下为其添加额外的功能。 请注意装饰器模式并非代理模式但在某些情况下它可以作为一种替代方案来实现类似的功能。
http://www.hkea.cn/news/14373762/

相关文章:

  • 太原注册公司网站中海建路桥建设有限公司网站
  • 岳阳网站优化郑州新闻最新消息今天
  • 个人博客网站域名注册做民宿加盟哪些网站比较好
  • 个人网站建设案例教程做网站网站犯法吗
  • 天河区网站建设网站二级导航
  • 中牟网站建设网站建设带服务器
  • python做的知名网站工商营业执照年检
  • 太月星网站建设程序开发网页设计wordpress中文商城模板
  • 企业官方网站建设教程个人怎么创建网站
  • 做企业网站10万起步百度一下建设部网站
  • 自家宽带怎么建设网站手机下载软件
  • 织梦做的网站如何去掉index深圳软件定制公司
  • 网站开发 验收邯郸手机网站建设费用
  • 优化大师官方网站中国空间站模型
  • 罗湖商城网站建设哪家技术好ip138查询网站网址域名ip
  • 可做产品预售的网站南昌网站维护
  • 微信第三方网站开发教程神马seo教程
  • 网站建设加盟创业国产crm系统91
  • 负责网站建设wordpress js写法
  • 可以做动图的视频网站蚌埠大建设及棚户区改造官方网站
  • 品牌网站建设定位全国最有实力的信息网络公司排名
  • 做影视网站的软件聚名网认证
  • 做网站是用的那个开发软件网站虚拟主机1g
  • 怎样用电脑做网站服务器部门网站建设怎么做
  • 西安网站建设专家岳阳网站建设哪家好
  • 医院做网站的风格vps推荐
  • 淄博网站制作多样定制徐州模板厂
  • 网站后台怎么换图片重庆装修公司前十强
  • 成都网站开发 Vr网络搭建的基本流程
  • 个人互动网站广州响应式网站咨询