资讯专栏INFORMATION COLUMN

动态代理模式

chavesgu / 688人阅读

摘要:实现数据库操作关于人员的数据库操作定义一个代理类代理,如果使用静态代理,那么这个类必须实现接口,这里采用动态代理类,免去实现代理类定义的所有接口。

描述:代理对象和被代理对象具有相同的行为,客户端通过代理对象实现对被代理对象调用,代理对象除了可以代理被代理对象的所有行为外,还可以在被代理对象的所有行为上添加一些额外的内容,如开闭事务,权限拦截等;动态代理可以生成一个不用实现被代理类所有接口的代理类,它内部通过被代理类的classLoader和反射机制实现被代理类的所有接口。。

场景:在数据库操作中,假如所有增删改查操作都需要加log记录,可以代理这个数据库操作,然后在运行这些增删改查操作时加一个log记录,客户端使用方式仍然不变。

实现:

数据库操作:

interface Dao {
    void insert();
    void delete();
}

关于人员的数据库操作:

class UserDao implements Dao {
    @Override
    public void insert() {
        System.out.println("insert user instance to db!");
    }
    @Override
    public void delete() {
        System.out.println("delete user instance from db!");
    }
}

定义一个代理类代理UserDao,如果使用静态代理,那么这个类必须实现Dao接口,这里采用动态代理类,免去实现代理类定义的所有接口。

class UserDaoProxy implements InvocationHandler {
    Dao dao;
    UserDaoProxy(Dao dao) {
        this.dao = dao;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        Object result = method.invoke(dao, args);
        after();
        return result;
    }
    private void before() {
        System.out.println("开始log...");
    }
    private void after() {
        System.out.println("结束log");
    }
}

客户端调用:

public class ProxyDemo {
    public static void main(String[] args) {
        UserDaoProxy proxy = new UserDaoProxy(new UserDao());
        Dao dao = (Dao)Proxy.newProxyInstance(UserDao.class.getClassLoader(), UserDao.class.getInterfaces(), proxy);
        dao.insert();
        dao.delete();
    }
}

打印结果:

  

开始log...
insert user instance to db!
结束log
开始log...
delete user instance from db!
结束log

结论:通过代理类即能保持原接口调用不变,还能对接口调用的前后增加额外的业务代码,甚至可以改变接口的实现,why?想想现实中的代理就知道了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64007.html

相关文章

  • Java三种代理模式:静态代理动态代理和cglib代理

    摘要:动态代理又被称为代理或接口代理。静态代理在编译时产生字节码文件,可以直接使用,效率高。代理无需实现接口,通过生成类字节码实现代理,比反射稍快,不存在性能问题,但会继承目标对象,需要重写方法,所以目标对象不能为类。 一、代理模式介绍 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功...

    Kaede 评论0 收藏0
  • 动态代理模式实现原理

    摘要:代理模式概念代理模式分为两种,一种是静态代理模式,一种是动态代理模式。面向切面的编程也是使用动态代理模式来实现的。 1.代理模式概念 代理模式分为两种,一种是静态代理模式,一种是动态代理模式。 静态代理模式:在程序运行之前需要写好代理类 动态代理模式:在程序运行期间动态生成代理类 2.动态代理的实现 动态代理实现的步骤: (1)写一个代理类SubjectHandler实现Invoca...

    songjz 评论0 收藏0
  • Java 动态代理(Dynamic proxy) 小结

    摘要:代理模式基本概念不论是静态代理还是动态代理其本质都是代理模式的一种实现那么什么是代理模式呢代理模式即给某一个对象提供一个代理并由代理对象控制对原对象的引用代理模式其实取材于实际生活例如我们生活中常见的房屋租赁代理我们在租房时一般不是直接和房 代理模式 基本概念 不论是静态代理还是动态代理, 其本质都是代理模式的一种实现, 那么什么是代理模式呢?代理模式, 即给某一个对象提供一个代理, ...

    Jason 评论0 收藏0
  • 代理模式

    摘要:简介代理模式委托模式就是使用代理对象来访问目标对象这样可以在目标对象执行前后来做一些逻辑处理这里使用到编程中的一个思想不要随意去修改别人已经写好的代码或者方法如果需改修改可以通过代理的方式来扩展该方法代理模式通用类图设计模式之禅文中提到为其 简介 代理模式(委托模式)就是使用代理对象来访问目标对象, 这样可以在目标对象执行前后, 来做一些逻辑处理. 这里使用到编程中的一个思想:不要随意...

    keithxiaoy 评论0 收藏0
  • 慕课网_《模式的秘密之代理模式》学习总结

    时间:2017年08月28日星期一说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s...学习源码:https://github.com/zccodere/s... 第一章:代理模式 1-1 概念介绍 学习本课程基础 面向对象的设计思维 了解多态的概念 了解反射机制 课程目标 代理模式基本概念及分类...

    wow_worktile 评论0 收藏0
  • Java 代理模式与 AOP

    摘要:本文首发于作者最近在学,研究了下和代理模式,写点心得和大家分享下。所以下面来重点分析下代理模式。这里代理模式分为静态代理和动态代理两种,我们分别来看下。代理模式,代理,意味着有一方代替另一方完成一件事。 本文首发于 https://jaychen.cc作者 jaychen 最近在学 Spring,研究了下 AOP 和代理模式,写点心得和大家分享下。 AOP 先说下AOP,AOP 全称 ...

    jk_v1 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<