Java中动态代理的使用

代理模式往往用于给原有的对象生成一个代理对象,代理对象持有原有对象的引用,同时可以增强原有对象的方法。


Java中实现创建代理对象的方式有两种,一种是我们常用的代理模式,另外一种就是Java提供的动态代理。下面将以一个例子来讲解东岱代理的使用,至于它的原理也是非常简单,对跟到底还是用的代理模式,只不过java帮我们封装好了而已。

首先创建一个接口:

public interface IShop {
    void doshop();
}

为这个接口创建一个实现类:

public class Shop implements IShop {
    @Override
    public void doshop() {
        Log.e("weilei", "i am shopping");
    }
}
这个实现类很简单,我们只是输出了一行日志,便于后续观察。

然后再程序入口中实现一下操作:

        final IShop shop = new Shop();

        IShop proxyInstance = (IShop) Proxy.newProxyInstance(Shop.class.getClassLoader(), new Class<?>[]{IShop.class},
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if(method.getName().equals("doshop")) {
                            Log.e("weilei", "===============");
                            return method.invoke(shop);
                        } else {
                            return null;
                        }
                    }
                });

        proxyInstance.doshop();
通过Proxy.new ProxyInstance()方法来为我们生成的shop对象创建一个代理,然后通过代理去调用相应的方法。最终输出如下:

08-29 10:17:50.226 31178-31178/com.weilei.fragdemo E/weilei: ===============
08-29 10:17:50.226 31178-31178/com.weilei.fragdemo E/weilei: i am shopping
说明当我们通过代理对象调用方法的时候,首先会进入InvocationHandler的invoke里面,然后通过反射调用原有对象的方法。

关于动态代理的简单使用就到这里。

猜你喜欢

转载自blog.csdn.net/wei_lei/article/details/77671613