美文网首页
动态代理

动态代理

作者: 紫鹰 | 来源:发表于2021-08-13 15:00 被阅读0次

    动态代理实现过程

    定义接口

    interface Animal{
           public void eat(String food)
    }
    

    获取代理实例并调用实力上的方法

        InvocationHandler handler = new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                Log.v("test", method.getName());
                Log.v("test", "看,那个动物吃"+args[0]+"了");
                return null;
            }
        };
        
        Animal animal = (Animal)Proxy.newProxyInstance(Animal.class.getClassLoader(),new Class[]{Animal.class},handler);
        animal.eat("豆子");
    
    • 动态代理会生成接口或者实现接口的类的实例
    • 该实例并非静态代码实例
    • 动态实例方法调用时,会出发InvocationHandler中invoke方法
    • 在invoke方法中可以做一些动态处理

    应用

    • 1.框架设计,生成代理实例给框架内部使用。如Retrofit
      框架将公共的操作抽象封装(如网络请求等),用户只需要设置个性化的参数即可(如设置接口地址,参数等)

    • 2.框架设计,生成动态代理实例给客户端使用。如Spring框架

    相关文章

      网友评论

          本文标题:动态代理

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