JDK的动态代理


public static Object createProxy(Object target) {//这个target是被代理对象
        return Proxy.newProxyInstance(ProxyTest.class.getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {

            //这里的proxy是newProxyInstance返回生成的代理对象,method表示代理对象目前正在调用的方法
            //agrs表示代理类调用的方法包含的参数
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if ("sayHello".equals(method.getName())) {
                    doBefore();
                    try {
                        method.invoke(target, args);
                    } catch (Exception e) {
                        doThrowing();
                    }
                    doAfter();
                }
                return null;
            }
        });
    }
JDK动态代理就是通过Proxy.newProxyInstance来创建代理对象的:
  • 第一个参数是ClassLoader:因为此次代理会创建一个接口的实现类,需要将这个类加载到jvm中,所以用到了ClassLoader。 (你要在哪个类里面生成代理对象就传哪个类的ClassLoader)

  • 第二个参数是代理类要实现的所有接口:当你调用这些接口的方法时都会进行拦截。

  • 第三个参数是InvocationHandler,每次调用代理对象的方法时,都会先执行InvocationHandler的invoke方法,在该方法中实现我们的拦截逻辑。

你可能感兴趣的:(JDK的动态代理)