spring aop

什么是aop

面向切面编程

AOP 要达到的效果是,保证开发者不修改源代码的前提下,去为系统中的业务组件添加某种通用功能。

AOP实现的关键就在于AOP框架自动创建的AOP代理,AOP代理则可分为静态代理和动态代理两大类,其中静态代理是指使用AOP框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于JDK动态代理、CGLIB等在内存中“临时”生成AOP动态代理类,因此也被称为运行时增强。

面向切面的编程(AOP) 是一种编程范式,旨在通过允许横切关注点的分离,提高模块化, 具体点: 实现的是在我们写的代码的基础上进行一定的包装,如在方法执行前、或执行后、或是在执行中出现异常后这些地方进行拦截处理或叫做增强处理。AOP提供切面来将跨越对象关注点模块化。

Aop的概念

Pointcut:是一个(组)基于正则表达式的表达式,有点绕,就是说他本身是一个表达式,但是他是基于正则语法的。通常一个pointcut,会选取程序中的某些我们感兴趣的执行点,或者说是程序执行点的集合。

JoinPoint:程序执行过程中可插入切面的点(如方法调用、异常抛出),封装了当前连接点(如被拦截的方法)的上下文信息;
程序执行过程中可插入切面的点(如方法调用、异常抛出);在Spring AOP中,JoinPoint参数是可选的,但如果在通知方法中需要访问连接点的信息(如方法名、参数等),就必须显式声明这个参数。例如,在@Around中使用了ProceedingJoinPoint,而其他通知如果需要获取连接点信息,也需要添加JoinPoint参数

Advice:封装横切逻辑的模块(如日志、事务),包含通知(Advice)和切入点(Pointcut)

Aspect:就是我们关注点的模块化。这个关注点可能会横切多个对象和模块,事务管理是横切关注点的很好的例子。它是一个抽象的概念,从软件的角度来说是指在应用程序不同模块中的某一个领域或方面。又pointcut 和advice组成。

Weaving:把切面应用到目标对象来创建新的 advised 对象的过程。

应用场景

事务管理/日志/接口层级的权限;
允许将这些关注点从业务逻辑中分离出来,并以声明的方式添加到应用程序中

spring中有aop实现方式? 有什么区别?

有两种方式: JDK动态代理和cglib代理; 但两种都是基于代理机制的不同实现而已
实现方式:JDK动态代理只能代理实现了接口的类,他通过反射机制在运行时创建一个实现了指定接口的代理对象;cglib通过生成目标类的子类来实现代理,因此可以代理没有实现接口的类
性能: cglib的性能通常优于jdk动态代理,因为他是通过字节码生成的,避免了反射的开销,cglib不能代理final类和final方法,因为他无法继承这些类和方法.

https://www.cnblogs.com/alan-yin/p/15065378.html

Spring AOP和AspectJ有什么区别?

AspectJ:静态织入/效率高/比spring aop复杂;

https://blog.csdn.net/java_wxid/article/details/131354915

springboot中aop是什么实现方式?原因是什么?

springboot 2.x版本都改成使用cglib动态代理,因为JDK动态代理时,没有接口会报错,虽然效果差不多,但是cglib更方便

参考: https://blog.csdn.net/myli92/article/details/127586235
这里面重点说了,spring默认实现机制是什么?springboot为什么有修改了呢?

posted @ 2025-04-21 11:27  是笨小孩儿  阅读(31)  评论(0)    收藏  举报