jdk、cglib动态代理代码示例
生活随笔
收集整理的這篇文章主要介紹了
jdk、cglib动态代理代码示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- jdk動態代理
- 實現步驟
- 代碼示例
- 新建一個接口
- 新建一個接口的實現類
- 新建一個代理類
- 調用測試
- cglib動態代理實現
- 實現步驟
- 創建一個實現類
- 新建一個代理類
- 調用測試
jdk動態代理
實現步驟
代碼示例
新建一個接口
package com.demo.rpc.proxy;public interface NewsService {String queryById(long newsId); }新建一個接口的實現類
package com.demo.rpc.proxy;public class NewsServiceImpl implements NewsService {@Overridepublic void queryById(long newsId) {System.out.println("成龍億元豪宅司法拍賣被撤回 原定于明日開拍 " + newsId);} }新建一個代理類
package com.demo.rpc.proxy;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class JDKProxy implements InvocationHandler {Object targetObject;/*** 傳入目標對象進行代理* @param targetObject* @return*/public Object newProxy(Object targetObject) {this.targetObject = targetObject;return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("代理之前");Object invoke = method.invoke(targetObject, args);System.out.println("代理之后");return invoke;} }調用測試
@Testpublic void jdkProxy(){NewsServiceImpl newsServiceImpl = new NewsServiceImpl();JDKProxy proxy = new JDKProxy();NewsService newsService = (NewsService)proxy.newProxy(newsServiceImpl);newsService.queryById(1);}cglib動態代理實現
實現步驟
創建一個實現類
package com.demo.rpc.proxy;public class HelloService {public void sayHello(){System.out.println("hello");} }新建一個代理類
package com.demo.rpc.proxy;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 CGLIBProxy implements MethodInterceptor {Object targetObject;public Object newProxy(Object targetObject){this.targetObject = targetObject;Enhancer enhancer = new Enhancer();enhancer.setSuperclass(targetObject.getClass());enhancer.setCallback(this);Object proxyObj = enhancer.create();return proxyObj;}@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {System.out.println("代理之前");Object invoke = method.invoke(targetObject, args);System.out.println("代理之后");return invoke;} }調用測試
@Testpublic void CGLIBProxy(){CGLIBProxy proxy = new CGLIBProxy();HelloService helloService = (HelloService)proxy.newProxy(new HelloService());helloService.sayHello();}總結
以上是生活随笔為你收集整理的jdk、cglib动态代理代码示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jetty9更改post请求长度
- 下一篇: 为什么可以通过类名调用静态方法?