动态代理

定义

动态代理是一种设计模式,通过在运行时创建代理对象来控制对原始对象的访问,而不是在编译时就确定代理类。动态代理可以在不修改原始对象的前提下,动态地为对象添加功能,代理类的生成和方法的调用都是在运行时完成的。

组成部分

1.原始对象(目标对象)

实际执行业务逻辑的对象。

2.代理对象

在运行时动态生成,控制对原始对象的访问,并可以在调用原始对象的方法之前或之后添加额外的操作。

3.接口

代理对象和原始对象通常实现相同的接口。

结构形式

1.InvocationHandler

一个接口,用于定义代理对象在调用方法时的处理方式。

2.Proxy类

Java中的Proxy类,用于动态生成代理对象。

分类

1.JDK动态代理:基于接口的动态代理。原始对象必须实现一个或多个接口

2.CGLIB代理:基于类的动态代理。通过生成原始对象子类的方式实现代理,适用于没有实现接口的类。

目的

动态代理通过在运行时生成代理对象,可以在不修改原始对象代码的情况下添加功能,如日志记录、事务管理、权限控制等。相比静态代理,它更加灵活,可以应对接口和实现类在开发过程中的变化。

基本原理

动态代理在运行时根据原始对象的接口生成代理类,并在代理类中通过反射机制调用原始对象的方法,同时可以在方法调用前后插入自定义的逻辑。代理

定义

动态代理是一种设计模式,通过在运行时创建代理对象来控制对原始对象的访问,而不是在编译时就确定代理类。动态代理可以在不修改原始对象的前提下,动态地为对象添加功能,代理类的生成和方法的调用都是在运行时完成的。

组成部分

1.原始对象(目标对象)

实际执行业务逻辑的对象。

2.代理对象

在运行时动态生成,控制对原始对象的访问,并可以在调用原始对象的方法之前或之后添加额外的操作。

3.接口

代理对象和原始对象通常实现相同的接口。

结构形式

1.InvocationHandler

一个接口,用于定义代理对象在调用方法时的处理方式。

2.Proxy类

Java中的Proxy类,用于动态生成代理对象。

分类

1.JDK动态代理:基于接口的动态代理。原始对象必须实现一个或多个接口

2.CGLIB代理:基于类的动态代理。通过生成原始对象子类的方式实现代理,适用于没有实现接口的类。

目的

动态代理通过在运行时生成代理对象,可以在不修改原始对象代码的情况下添加功能,如日志记录、事务管理、权限控制等。相比静态代理,它更加灵活,可以应对接口和实现类在开发过程中的变化。

基本原理

动态代理在运行时根据原始对象的接口生成代理类,并在代理类中通过反射机制调用原始对象的方法,同时可以在方法调用前后插入自定义的逻辑。