java 静态代理 JDK动态代理 Cglib动态代理
下面以一个简单的银行账户为例讲述讲述动态代理。 设计一个银行账户类,包含用户的账户余额,实现查询和更新余额功能 这个系统用了一段时间,有客户要求对账说账户余额给弄错了?因为上面没有存取款记录,最后银行不认账,客户收到了损失。银行为了避免这种现象再次发生,决定对这个系统进行修改,但是因为bankAccount太过复杂,希望在不修改bankAccount的情况下,增加日志功能。 静态代理 使用静态代理解决上面的问题。 银行要求所有模块都需要添加日志功能,这对苦逼的程序员来说真的是一个不小的工作量啊,这需要写多少个自定义的代理类???还有没有时间可以愉快的玩耍了! 动态代理 Java JDK提供了一种动态代理实现机制,不用为每一个类自己手动去编写一个代理类,它可以帮你自动生成代理类。 下面讲一下,上面用到的几个关键方法和接口: InvocationHandler接口: public interface InvocationHandler { public Object invoke(Object proxy,Method method,Object[] args) throws Throwable; } 参数说明: Object proxy:动态生成的代理类的实例 Method method:要调用的方法 Object[] args:方法调用时所需要的参数