jdk、cglib动态代理代码示例
生活随笔
收集整理的這篇文章主要介紹了
jdk、cglib动态代理代码示例
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- jdk動(dòng)態(tài)代理
- 實(shí)現(xiàn)步驟
- 代碼示例
- 新建一個(gè)接口
- 新建一個(gè)接口的實(shí)現(xiàn)類
- 新建一個(gè)代理類
- 調(diào)用測(cè)試
- cglib動(dòng)態(tài)代理實(shí)現(xiàn)
- 實(shí)現(xiàn)步驟
- 創(chuàng)建一個(gè)實(shí)現(xiàn)類
- 新建一個(gè)代理類
- 調(diào)用測(cè)試
jdk動(dòng)態(tài)代理
實(shí)現(xiàn)步驟
代碼示例
新建一個(gè)接口
package com.demo.rpc.proxy;public interface NewsService {String queryById(long newsId); }新建一個(gè)接口的實(shí)現(xiàn)類
package com.demo.rpc.proxy;public class NewsServiceImpl implements NewsService {@Overridepublic void queryById(long newsId) {System.out.println("成龍億元豪宅司法拍賣被撤回 原定于明日開拍 " + newsId);} }新建一個(gè)代理類
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;/*** 傳入目標(biāo)對(duì)象進(jìn)行代理* @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;} }調(diào)用測(cè)試
@Testpublic void jdkProxy(){NewsServiceImpl newsServiceImpl = new NewsServiceImpl();JDKProxy proxy = new JDKProxy();NewsService newsService = (NewsService)proxy.newProxy(newsServiceImpl);newsService.queryById(1);}cglib動(dòng)態(tài)代理實(shí)現(xiàn)
實(shí)現(xiàn)步驟
創(chuàng)建一個(gè)實(shí)現(xiàn)類
package com.demo.rpc.proxy;public class HelloService {public void sayHello(){System.out.println("hello");} }新建一個(gè)代理類
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;} }調(diào)用測(cè)試
@Testpublic void CGLIBProxy(){CGLIBProxy proxy = new CGLIBProxy();HelloService helloService = (HelloService)proxy.newProxy(new HelloService());helloService.sayHello();}總結(jié)
以上是生活随笔為你收集整理的jdk、cglib动态代理代码示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jetty9更改post请求长度
- 下一篇: 为什么可以通过类名调用静态方法?