0
点赞
收藏
分享

微信扫一扫

动态代理实现动态插入日志

星巢文化 2022-02-06 阅读 70

设计模式之动态代理

动态代理

静态代理:
需求:在项目现有所有类的方法前后打印日志。
那么我们如何在不修改原来代码的情况下实现这个功能呢?
我们可以先用“静态代理”的方式实现。

  1. 为现有的每一个类都编写一个对应的代理类,并且让它实现和目标类相同的接口(假设都有)

  2. 在创建代理对象时,通过构造器塞入一个目标对象,然后在代理对象的方法内部调用目标对象同名方法,并在调用前后打印日志。也就是说,代理对象 =增强代码 + 目标对象(原对象)。有了代理对象后,就不用原对象了。
    缺点:程序员要手动为每一个目标类编写对应的代理类。如果当前系统已经有成百上千个类,工作量太大了。所以,现在我们的努力方向是:如何少写或者不写代理类,却能完成代理功能?

动态代理:
JDK提供了java.lang.reflect.InvocationHandler接口和 java.lang.reflect.Proxy类。
优点:
代码演示动态代理:
业务接口
业务接口实现类
日志类
代理类
测试代码
演示结果,实现插入日志功能

举报

相关推荐

0 条评论