Java动态代理

来源:互联网 发布:淘宝网鞋子女鞋 编辑:IT博客网 时间:2019/08/18 21:06
package com.company;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class Main {    public interface IUserService{        String getName();    }    public class UserServiceImpl implements IUserService{        @Override        public String getName() {            return "chf";        }    }    public class ProxyUtil{        public <T> T create(final T t) {            return (T) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(), t.getClass().getInterfaces(), new InvocationHandler() {                @Override                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {                    return method.invoke(t, args);                }            });        }    }    public void test(){        IUserService userService = new UserServiceImpl();        ProxyUtil proxy = new ProxyUtil();        //动态代理,这里使用的是反射,考虑性能的话也可以使用cglib        //动态代理可以应用于RPC等场景        IUserService proxyUserService =  proxy.create(userService);        System.out.println(proxyUserService.getName());    }    public static void main(String[] args) {        Main main = new Main();        main.test();    }}