- 作者:老汪软件技巧
- 发表时间:2023-12-27 23:00
- 浏览量:
简介
Java动态代理是一种在运行时创建代理对象的技术,它可以在不修改原始类的情况下,对类的方法进行控制和扩展。常见应用场景:AOP(面向切面编程)、事务管理、权限控制、日志记录等等。
特点 灵活性:动态代理可以在运行时创建代理对象,使得我们可以动态地对目标对象进行代理,而无需提前编写代理类。可扩展性:通过动态代理,我们可以在不修改原始类的情况下,对其方法进行增强、添加额外的逻辑或进行其他操作。代码复用:使用动态代理可以将一些通用的操作逻辑抽取出来,作为代理处理程序,从而实现代码的复用。解耦合:动态代理可以将代理逻辑与具体的业务逻辑分离,使得代码更加清晰和可维护。 Java动态代理的两种实现方式 基于接口的动态代理(jdk动态代理)
这种方式要求被代理的类实现一个接口。在运行时,通过Java的反射机制,动态生成一个代理类,该代理类实现了被代理类所实现的接口,并且在代理类的方法中添加了额外的逻辑,这种方式的代理类是通过Proxy类的静态方法()来创建的。
定义一个接口和实现类:该接口包含了实现类(被代理类)的方法。
创建代理类,该类负责实现 () 方法,在该方法中定义了对原始方法的增强逻辑。
使用Proxy类创建代理对象:使用 Proxy 类的静态方法 () 来创建代理对象。
该方法接受三个参数:,用于加载代理类;Class[] ,指定被代理类所实现的接口;,用于处理代理方法的调用。
调用代理对象的方法:通过代理对象调用方法时,实际上会调用 的 () 方法。在该方法内部,会根据被调用的方法名称和参数,找到对应的 对象,并通过反射机制调用原始对象的方法。(了解反射机制:Java反射链接)
基于类的动态代理(CGLIB动态代理)
这种方式要求被代理的类不能是final类。在运行时,通过CGLIB库生成一个被代理类的子类,该子类继承了被代理类的所有方法,并且在子类的方法中添加了额外的逻辑,这种方式的代理类是通过类来创建的。
对比两种动态代理方式