java基于接口的动态代理
生活随笔
收集整理的這篇文章主要介紹了
java基于接口的动态代理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、目標代理測試類
package com.proxy;public class StudentProxyTest {public static void main(String[] args) {//student目標對象StudentServiceImpl studentService = new StudentServiceImpl();//student代理對象StudentService userService = StudentHandlerProxy.createProxy(studentService, StudentService.class);userService.add("李清華");} }2、代理類
package com.proxy;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class StudentHandlerProxy implements InvocationHandler {private Object target;public StudentHandlerProxy(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("【代理對象】" + this.target.getClass() + ".m1()方法,開始執行...");long starTime = System.nanoTime();Object result = method.invoke(this.target, args);long endTime = System.nanoTime();System.out.println("【代理對象】" + this.target.getClass() + ".m1()方法,執行結束,耗時:" + (endTime - starTime) + "納秒");System.out.println();return result;}/*** 創建targetInterface接口的代理對象** @param targetObj 需要被代理的對象* @param targetInterface 被代理的接口* @param <T>* @return*/public static <T> T createProxy(Object targetObj, Class<T> targetInterface) {if (!targetInterface.isInterface()) {throw new IllegalStateException("targetInterface,必須是接口類型!");} else if (!targetInterface.isAssignableFrom(targetObj.getClass())) {throw new IllegalStateException("target,必須是 targetInterface接口的實現類!");}StudentHandlerProxy handler = new StudentHandlerProxy(targetObj);return (T) Proxy.newProxyInstance(targetObj.getClass().getClassLoader(), targetObj.getClass().getInterfaces(), handler);} }3、目標對象接口和類
package com.proxy;public interface StudentService {void add(String name);} package com.proxy;public class StudentServiceImpl implements StudentService {@Overridepublic void add(String name) {System.out.println(String.format("新增學生:" + name + ",操作成功!"));}}4、打印輸出
【代理對象】class com.proxy.StudentServiceImpl.m1()方法,開始執行... 新增學生:李清華,操作成功! 【代理對象】class com.proxy.StudentServiceImpl.m1()方法,執行結束,耗時:16818800納秒總結
以上是生活随笔為你收集整理的java基于接口的动态代理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity游戏设计与实现 南梦宫一线程
- 下一篇: Unity游戏设计与实现 南梦宫一线程序