接口代理
- 动态代理主要用于接口代理,而静态代理只能为固定的具体类创建代理。
- 通过动态代理,可以在运行时生成代理对象(无需关心代理类的创建)。
- 无需为每个类编写具体的代理类。
减少代码重复:
- 使用静态代理时,需要为每个被代理类编写一个独立的代理类。
- 动态代理通过使用通用的 InvocationHandler 接口,可以减少代码的重复性
- 使代理的创建和管理更加灵活和便捷。
横切关注点的处理方式
- 动态代理可以在运行时动态地植入额外的代码逻辑,形成对代理方法的拦截,方便统一地进行维护、处理。
- 这可以使得我们能够通过代理轻松地为多个类添加相同的横切关注点,而不需要修改每个被代理类的代码。
类的装饰:
- 动态代理可以用于在不改变原始类的前提下对类进行装饰。
- 通过代理对象可以动态地在原始方法之前或之后执行额外的逻辑,
- 实现对原始类的增强而不改变原始类的结构。
运行时的灵活性:
- 动态代理在运行时动态生成代理类,可以根据不同的需求生成不同的代理对象,灵活性更高。
- 在运行时根据实际情况选择要使用的代理类,而不用在编译时就确定代理类。