动态代理
定义
动态代理是一种设计模式,通过在运行时创建代理对象来控制对原始对象的访问,而不是在编译时就确定代理类。动态代理可以在不修改原始对象的前提下,动态地为对象添加功能,代理类的生成和方法的调用都是在运行时完成的。
组成部分
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代理:基于类的动态代理。通过生成原始对象子类的方式实现代理,适用于没有实现接口的类。
目的
动态代理通过在运行时生成代理对象,可以在不修改原始对象代码的情况下添加功能,如日志记录、事务管理、权限控制等。相比静态代理,它更加灵活,可以应对接口和实现类在开发过程中的变化。
基本原理
动态代理在运行时根据原始对象的接口生成代理类,并在代理类中通过反射机制调用原始对象的方法,同时可以在方法调用前后插入自定义的逻辑。