当前位置: 首页 > news >正文

aop整理

一、aop基础知识

Spring AOP 详细深入讲解+代码示例

二、spring/spring boot/spring cloud中出现的注解/类与概念的对应

@Aspect:
标注当前MyAspect是一个切面类,–》对应切面的概念,在切面类中有用@Before等注解修饰的方法作为advice,也有用@pointPointcut修饰的方法去定义切点,还会在方法中使用的ProceedingJoinPoint类 和 JoinPoint类 对应切面的连接点
SpringAOP中的JointPoint和ProceedingJoinPoint使用详解(附带详细示例)

三、切点表达式

//定义切点表达式
@Pointcut("execution(* com.itheima.anno.*.*(..))")
public void pointcut(){}

第15章-Spring AOP切点表达式(Pointcut)详解

四、不添加@EnableAspectJAutoProxy–来自GPT

在Spring Framework的应用中,@EnableAspectJAutoProxy注解启用了对AspectJ注解切面(如使用@Aspect注解的类)的支持,进而允许Spring通过代理为Beans提供面向切面的编程(AOP)功能。对于大部分基于Spring Boot的应用,实际上并不需要显式地添加@EnableAspectJAutoProxy注解。这是因为Spring Boot自动配置会默认开启这项功能。让我们来详细了解一下Spring Boot自动配置在这方面是如何工作的。

Spring Boot的自动配置行为
对于使用spring-boot-starter-aop依赖的Spring Boot应用,AOP支持是通过自动配置开启的,这一点体现在AopAutoConfiguration中。这样,就不需要开发者显式地在自己的配置类中添加@EnableAspectJAutoProxy。

具体来说,spring-boot-starter-aop提供的AopAutoConfiguration会自动注册一个AnnotationAwareAspectJAutoProxyCreator的Bean到Spring容器中。这个Bean是启用@AspectJ支持的关键,意味着Spring Boot会自动处理使用@Aspect注解的类,并按照这些类中定义的切面逻辑对目标方法进行增强(例如,应用前置、后置或环绕通知等)。

如果不添加@EnableAspectJAutoProxy
在Spring Boot应用中,如果你没有显式添加@EnableAspectJAutoProxy:

没有影响:在大多数情况下,不显式添加@EnableAspectJAutoProxy对应用没有影响。这是因为Spring Boot的AopAutoConfiguration已经为你启用了AspectJ的自动代理支持。你的AOP逻辑(如@Before、@AfterReturning、@Around、@AfterThrowing注解标注的方法)应该会按预期工作。

特定情景下的差异:显式添加@EnableAspectJAutoProxy仍然可以在特定情境下提供灵活性。例如,如果你需要使用AspectJ编译时织入(而不是在运行时通过Spring AOP的代理机制),或者需要精细控制AOP的某些行为,如proxyTargetClass属性。@EnableAspectJAutoProxy(proxyTargetClass = true)可以强制使用CGLIB代理而不是JDK动态代理(无论接口的存在与否),这在处理没有接口的类时可能很有用。

小结
总结来说,在Spring Boot应用中,通过spring-boot-starter-aop依赖引入AOP支持通常是足够的,无需显式添加@EnableAspectJAutoProxy。只在有特定需求时,才可能需要显式使用此注解来控制AOP的细节行为。这体现了Spring Boot“约定大于配置”的设计理念,尽最大可能简化Spring应用的开发。

相关文章:

  • 从0开始带你成为Kafka消息中间件高手---第三讲
  • 100个 Unity小游戏系列五 -Unity 抽奖游戏专题三老虎机游戏
  • Android 四大组件 service
  • Firefox国际版
  • 【调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件】
  • Jeecg | 如何解决 ERR Client sent AUTH, but no password is set 问题
  • 前端应用开发实验:表单控件绑定
  • 什么叫USDT(泰达币)的前世今生!
  • JavaScript tab选项卡切换
  • 分享一个思路,使用插桩技术解决慢查询测试问题
  • 16:00面试,16:08就出来了,问的问题有点变态。。。
  • 【网络版本计算器的实现】
  • Scikit-Learn随机森林回归
  • Java设计模式:享元模式实现高效对象共享与内存优化(十一)
  • 音乐传奇告别之作:《杰作》未解之谜❗❗
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • ES6核心特性
  • Java应用性能调优
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • QQ浏览器x5内核的兼容性问题
  • Selenium实战教程系列(二)---元素定位
  • Spark学习笔记之相关记录
  • 阿里云购买磁盘后挂载
  • 从零搭建Koa2 Server
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • !!java web学习笔记(一到五)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (12)目标检测_SSD基于pytorch搭建代码
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (zhuan) 一些RL的文献(及笔记)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二十四)Flask之flask-session组件
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)用.Net的File控件上传文件的解决方案
  • ***监测系统的构建(chkrootkit )
  • .bat批处理出现中文乱码的情况
  • .gitignore文件_Git:.gitignore
  • .Net Redis的秒杀Dome和异步执行
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 中viewstate的原理和使用
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • ::
  • ?.的用法
  • @AliasFor 使用
  • @Bean有哪些属性
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [\u4e00-\u9fa5] //匹配中文字符
  • [20171102]视图v$session中process字段含义
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件