国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

Spring如何基于Proxy及cglib實現動態代理

瀏覽:11日期:2023-09-01 10:15:01

spring中提供了兩種動態代理的方式,分別是Java Proxy以及cglib

JavaProxy只能代理接口,而cglib是通過繼承的方式,實現對類的代理

添加一個接口以及對應的實現類

public interface HelloInterface { void sayHello();}

public class HelloInterfaceImpl implements HelloInterface { @Override public void sayHello() { System.out.println('hello'); }}

JavaProxy通過實現InvocationHandler實現代理

public class CustomInvocationHandler implements InvocationHandler { private HelloInterface helloInterface; public CustomInvocationHandler(HelloInterface helloInterface) { this.helloInterface = helloInterface; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println('before hello for proxy'); Object result = method.invoke(helloInterface, args); System.out.println('after hello for proxy'); return result; }}

而cglib實現MethodInterceptor進行方法上的代理

public class CustomMethodInterceptor implements MethodInterceptor { @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println('before hello for cglib'); Object result = methodProxy.invokeSuper(o, objects); System.out.println('after hello for cglib'); return result; }}

分別實現調用代碼

public static void main(String[] args) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(HelloInterfaceImpl.class); enhancer.setCallback(new CustomMethodInterceptor()); HelloInterface target = (HelloInterface) enhancer.create(); target.sayHello(); CustomInvocationHandler invocationHandler = new CustomInvocationHandler(new HelloInterfaceImpl()); HelloInterface target2 = (HelloInterface) Proxy.newProxyInstance(Demo.class.getClassLoader(), new Class[]{HelloInterface.class}, invocationHandler); target2.sayHello(); }

可以看到對于的代理信息輸出

before hello for cglibhelloafter hello for cglibbefore hello for proxyhelloafter hello for proxy

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 曲靖市| 许昌县| 广平县| 政和县| 乌恰县| 霍邱县| 洪泽县| 康乐县| 苗栗县| 中西区| 大埔县| 都昌县| 楚雄市| 忻城县| 新昌县| 南部县| 高阳县| 岢岚县| 连平县| 桑日县| 乐陵市| 郯城县| 荆门市| 潍坊市| 建瓯市| 宁城县| 赤城县| 贡山| 双江| 石首市| 横峰县| 清原| 嘉兴市| 台中市| 阳信县| 留坝县| 崇文区| 灌云县| 西充县| 监利县| 河池市|