美文网首页
JDK的动态代理

JDK的动态代理

作者: 奇乞祈兴 | 来源:发表于2017-03-24 15:32 被阅读0次
    
    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的动态代理

          本文链接:https://www.haomeiwen.com/subject/cgdfottx.html