JDK动态代理

作者: 裘马轻狂大帅 | 来源:发表于2019-04-01 22:44 被阅读0次

一、为什么需要动态代理

1.1 从代理模式说起

代理模式是指给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。这种模式有什么用呢?它可以在原对象的基础上增强原对象的功能,比如在原对象调用一个方法的前后进行日志、事务操作等。Spring AOP就使用了代理模式。

1.2代理模式----静态代理

如何实现代理模式呢?首先来看静态代理。静态代理是指在程序运行前就已经存在的编译好的代理类是为静态代理。实现静态代理有四个步骤:

①定义业务接口;

②被代理类实现业务接口;

③定义代理类并实现业务接口;

④最后便可通过客户端进行调用。(这里可以理解成程序的main方法里的内容)

1.3 代理模式----动态代理

既然有了静态代理,为什么会出现动态代理呢?那我们就说一下静态代理的一些缺点吧:

①代理类和被代理类实现了相同的接口,导致代码的重复,如果接口增加一个方法,那么除了被代理类需要实现这个方法外,代理类也要实现这个方法,增加了代码维护的难度。

②代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。比如上面的例子,只是对用户的业务功能(IUserService)进行代理,如果是商品(IItemService)的业务功能那就无法代理,需要去编写商品服务的代理类。

于是乎,动态代理的出现就能帮助我们解决静态代理的不足。所谓动态代理是指:在程序运行期间根据需要动态创建代理类及其实例来完成具体的功能。

动态代理主要分为JDK动态代理和cglib动态代理两大类,

二、动态代理实例

2.1 使用JDK动态代理步骤:

①创建被代理的接口和类;

②创建InvocationHandler接口的实现类,在invoke方法中实现代理逻辑;

③通过Proxy的静态方法newProxyInstance( ClassLoaderloader, Class[] interfaces, InvocationHandler h)创建一个代理对象

④使用代理对象。

相关文章

网友评论

    本文标题:JDK动态代理

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