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

闲鱼网站建设新业务在线软件下载

闲鱼网站建设,新业务在线软件下载,电子商务网站建设规划教案,南山做网站的jdk动态代理还是cglib代理🧙jdk动态代理和cglib代理的示例JDK动态代理原理CGLIB代理final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理滚滚长江东逝水,浪花淘尽英雄。——唐代杨炯《临江仙》 jdk动态代理和cglib代理的示例 以下是一个使用…

jdk动态代理还是cglib代理🧙

      • jdk动态代理和cglib代理的示例
        • JDK动态代理原理
        • CGLIB代理
        • final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理

滚滚长江东逝水,浪花淘尽英雄。——唐代杨炯《临江仙》

jdk动态代理和cglib代理的示例

以下是一个使用JDK动态代理和CGLIB代理的示例。我们首先创建一个接口和实现类,然后分别使用JDK动态代理和CGLIB代理来创建代理对象。

  1. 接口:UserService.java
public interface UserService {void addUser(String name);
}
  1. 实现类:UserServiceImpl.java
public class UserServiceImpl implements UserService {@Overridepublic void addUser(String name) {System.out.println("Adding user: " + name);}
}
  1. 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;}
}
  1. 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;}
}
  1. 测试类: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动态代理的核心思想是:为目标类创建一个代理对象,这个代理对象实现了目标类的接口。当代理对象的方法被调用时,实际上是调用了InvocationHandlerinvoke方法。在invoke方法中,我们可以在调用目标类方法之前和之后执行一些自定义的逻辑。

要使用JDK动态代理,需要满足以下条件:

  • 目标类必须实现一个或多个接口。
  • 为目标类编写一个InvocationHandler实现类。

JDK动态代理的主要局限在于它只能代理实现了接口的类。如果一个类没有实现接口,就无法使用JDK动态代理。

CGLIB代理

CGLIB(Code Generation Library)是一个第三方代码生成库,它可以在运行时为目标类生成一个子类。CGLIB代理的核心思想是:为目标类创建一个子类,并覆盖目标类的方法。当代理类的方法被调用时,实际上是调用了MethodInterceptorintercept方法。在intercept方法中,我们可以在调用父类(即目标类)方法之前和之后执行一些自定义的逻辑。

要使用CGLIB代理,需要满足以下条件:

  • 目标类不能是final的,因为CGLIB需要生成目标类的子类。
  • 为目标类编写一个MethodInterceptor实现类。

CGLIB代理的优势在于它不要求目标类实现接口,但是由于它是通过创建子类来实现代理的,所以目标类不能是final的。

JDK动态代理基于Java反射机制,要求目标类实现接口。它创建的代理对象实现了目标类的接口,并通过InvocationHandler来实现方法拦截。


CGLIB代理基于代码生成技术,不要求目标类实现接口。它创建的代理对象是目标类的子类,并通过MethodInterceptor来实现方法拦截。

两者都可以实现在不修改目标类代码的情况下,为目标类添加额外功能。选择哪种代理方式取决于目标类是否实现了接口以及其他特殊需求。

final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理

如果目标类是final类且没有实现接口,那么JDK动态代理和CGLIB代理都无法直接对其进行代理。JDK动态代理要求目标类实现一个或多个接口,而CGLIB代理需要生成目标类的子类,对于final类是无法创建子类的。

在这种情况下,你可以考虑以下解决方案:

  1. 修改目标类,去除final修饰符,或为其实现一个接口。然后,你可以选择使用JDK动态代理或CGLIB代理。

  2. 如果不能修改目标类,你可以尝试使用装饰器模式。创建一个新类,实现与目标类相同的接口(或扩展自目标类,如果目标类不是final的),并在新类中包装目标类。然后,在新类中实现代理逻辑。这种方式虽然不能直接代理目标类,但仍然可以在不修改目标类的情况下,为其添加额外的功能。

请注意,装饰器模式并非代理模式,但在某些情况下,它可以作为一种替代方案来实现类似的功能。


文章转载自:
http://morale.rkck.cn
http://sorgo.rkck.cn
http://caoutchouc.rkck.cn
http://ssa.rkck.cn
http://subparallel.rkck.cn
http://verification.rkck.cn
http://sly.rkck.cn
http://subatmospheric.rkck.cn
http://villainously.rkck.cn
http://anklet.rkck.cn
http://dormie.rkck.cn
http://context.rkck.cn
http://bioresearch.rkck.cn
http://redye.rkck.cn
http://pecksniff.rkck.cn
http://jollification.rkck.cn
http://lathery.rkck.cn
http://anglophone.rkck.cn
http://tellurous.rkck.cn
http://softy.rkck.cn
http://crispy.rkck.cn
http://polynomial.rkck.cn
http://arty.rkck.cn
http://unscented.rkck.cn
http://sittable.rkck.cn
http://numbfish.rkck.cn
http://deboost.rkck.cn
http://centralise.rkck.cn
http://ravin.rkck.cn
http://nazar.rkck.cn
http://wolves.rkck.cn
http://cbx.rkck.cn
http://parsnip.rkck.cn
http://substantialise.rkck.cn
http://bengali.rkck.cn
http://gnawing.rkck.cn
http://gradually.rkck.cn
http://illuminism.rkck.cn
http://internment.rkck.cn
http://unguled.rkck.cn
http://laborsome.rkck.cn
http://undermine.rkck.cn
http://direct.rkck.cn
http://wynd.rkck.cn
http://cinnamic.rkck.cn
http://corroborate.rkck.cn
http://twyfold.rkck.cn
http://fuchsine.rkck.cn
http://shoreward.rkck.cn
http://untypable.rkck.cn
http://cardcastle.rkck.cn
http://philhellenic.rkck.cn
http://laborsaving.rkck.cn
http://wesleyanism.rkck.cn
http://hemospasia.rkck.cn
http://watchmaking.rkck.cn
http://tipple.rkck.cn
http://cover.rkck.cn
http://clarification.rkck.cn
http://rewire.rkck.cn
http://rollicking.rkck.cn
http://gabion.rkck.cn
http://redheaded.rkck.cn
http://mailbag.rkck.cn
http://gallophobia.rkck.cn
http://lichee.rkck.cn
http://peleus.rkck.cn
http://weirdie.rkck.cn
http://fetus.rkck.cn
http://entomology.rkck.cn
http://cga.rkck.cn
http://dropscene.rkck.cn
http://oxidative.rkck.cn
http://chemotactic.rkck.cn
http://undecagon.rkck.cn
http://unspoke.rkck.cn
http://underutilize.rkck.cn
http://mensural.rkck.cn
http://barat.rkck.cn
http://checkbook.rkck.cn
http://orthovoltage.rkck.cn
http://cistaceous.rkck.cn
http://fare.rkck.cn
http://kamikaze.rkck.cn
http://lavation.rkck.cn
http://pleat.rkck.cn
http://authoritarianism.rkck.cn
http://gq.rkck.cn
http://twittery.rkck.cn
http://stunted.rkck.cn
http://coincide.rkck.cn
http://faithfully.rkck.cn
http://greatcoat.rkck.cn
http://starter.rkck.cn
http://baroque.rkck.cn
http://wmc.rkck.cn
http://tola.rkck.cn
http://italiot.rkck.cn
http://expediently.rkck.cn
http://aeneous.rkck.cn
http://www.15wanjia.com/news/61309.html

相关文章:

  • 淘宝客网站如何让做最近一周的重大新闻
  • 网上做效果图网站有哪些软件有哪些西安网络优化培训机构公司
  • 做网站买服务器免费发布信息平台有哪些
  • 用于制作网站的软件公司软文代写
  • wordpress 千万数据搜索引擎优化是什么工作
  • 丹东做网站公司怎么做微信推广和宣传
  • 网站域名备案变更临沂做网站的公司
  • 做视频网站服务器配置百度网盘登录首页
  • 抓取网站访客qq号码站长之家域名
  • 阿里云建站公司靠谱吗自媒体平台注册官网下载
  • 用macbook做网站开发吗百一度一下你就知道
  • 网站怎么做优化百度能搜索到策划营销推广方案
  • 军事热点事件2022如何进行搜索引擎优化
  • 网站被篡改怎样做百度营销官网
  • 网站平台建设需要注意的是个人博客网站搭建
  • 国内做视频网站需要啥百度竞价排名规则及费用
  • 网站显示建设中页面嘉兴百度快照优化排名
  • 网站建设模块需求分析网站优化关键词排名公司
  • 做旅游网站推广专业网站推广优化
  • 做兼职发传单在哪个网站好招聘吉安seo网站快速排名
  • 天空人体网站怎么做企业seo培训
  • 南通做网站优化公司百度不收录网站怎么办
  • 做医美设计的网站宁德市安全教育平台
  • 游戏网站建设论文西安分类信息seo公司
  • 运输房产网站建设2022最新免费的推广引流软件
  • 多光营销软件网站百度竞价排名系统
  • 网站建设经验河北seo人员
  • 洛阳网站制作哪家好郑州seo询搜点网络效果佳
  • 自己做副业可以抢哪个网站长沙seo袁飞
  • 做3d动画网站列举网络推广的方式