spring学习笔记

    技术2025-09-25  67

    概念

    AOP,中文名为面向切面编程。通过预编译的方式和运行期间动态代理实现程序维护的一种技术。 (在编译后的运行期间执行的一种技术,技术底层是通过动态代理实现的)。动态代理的优点:在不修改源码的情况下对相应方法进行增强,松耦合

    AOP的作用和优势

    程序运行期间,在不修改源码的情况下对方法进行增强优势:减少代码重复,提高开发效率,便于维护

    思维示例

    现在我有save、update、delete三个方法,根据配置文件配置的结合规则,在运行的时候在相应的方法执行阶段将日志控制功能结合进去,这就是AOP。

    AOP底层实现

    AOP底层是通过Spring提供的动态代理技术实现的,运行期间Spring通过动态代理生成代理对象,代理对象方法执行时进行增强功能的介入,再去调目标对象的方法,从而完成功能增强。

    AOP的动态代理技术

    代理对象有接口就采用了JDK代理,否则cglib。

    JDK代理:基于接口的动态代理技术(要求代理对象必须有接口)cglib代理:基于父类的动态代理技术,cglib用的不是继承是动态生成一个对象

    AOP的相关概念(术语)

    Target(目标对象):代理的目标对象就是需要增强的对象,目标对象Proxy(代理):一个类被AOP增强后就产生一个结果代理类,就是代理对象JoinPoint(连接点):所谓的连接点就是那些被拦截到的点。spring中点指的是方法,因为spring中只支持方法类型的连接点,也就是方法。PointCut(切入点):所谓切入点是指我们要对哪些JoinPoint进行拦截的定义,拦截住并且加强了的方法。Advice(通知/增强):所谓通知就是拦截到JoinPoint之后要做的事情,也就是增强方法。Aspect(切面):就是PointCut+Advice的结合Weaving(织入):是指增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入,通俗的说织入就是将切点和通知结合的过程。

    AOP开发明确的事项

    要编写的内容

    编写核心业务逻辑代码(目标类的目标方法)编写切面类,切面类中有通知(增强功能方法)配置文件中配置织入关系,即哪些连接点和哪些通知结合

    AOP技术实现的内容 spring监控切入点方法的执行,一旦监控到切入点方法被执行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。 也就是说spring监控配置好的切入点,当切入点运行时根据配置的通知类型,动态生成代理对象,并执行代理对象相应的方法。就是动态代理的执行过程

    AOP动态代理方式的选择 动态判断有接口用jdk代理方式,无接口用cglib方式。

    小结

    Processed: 0.009, SQL: 9