jdk动态代理

    1. /**
    2. * 获取目标对象的代理对象
    3. * @param t 要代理的对象
    4. * @return 返回一个代理对象
    5. */
    6. public static <T> T getProxy(T t){
    7. InvocationHandler h = new InvocationHandler(){
    8. /**
    9. * @param proxy 要代理的对象
    10. * @param method 对象的方法
    11. * @param args 对象的方法的参数
    12. * @return 返回的代理对象
    13. * @throws Throwable 外抛异常
    14. */
    15. @Override
    16. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    17. System.out.println(method.getName() + " 方法执行了 " + "参数是 " + Arrays.toString(args));
    18. System.out.println(" 结果是 " + method.invoke(t, args));
    19. return method.invoke(t, args);
    20. }
    21. };
    22. // 获取代理类的接口
    23. Class<?>[] interfaces = t.getClass().getInterfaces();
    24. // 获取代理类的类加载器
    25. //ClassLoader loader = t.getClass().getClassLoader();
    26. // proxy 为目标对象创建代理
    27. Object proxy = Proxy.newProxyInstance(MyFactory.class.getClassLoader(), interfaces, h);
    28. return (T) proxy;
    29. }