关于SpringBoot AOP

news/2024/10/21 7:38:25/

什么是AOP

AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,也是Spring Boot框架的一个重要特点之一。AOP通过定义一些横跨多个对象和函数的通用行为,从而提供了一种方便的机制来解耦代码中的不同关注点。Spring Boot的AOP能够在方法调用前、调用后、抛出异常时、返回时等关键节点动态地对方法进行拦截,从而实现了诸如事务管理、安全控制、日志记录、性能监控等方面的功能。

Spring Boot的AOP基于切面(Aspect)和切点(Pointcut)两个概念。切面定义了需要在方法调用前、调用后、抛出异常时、返回时等关键节点执行的通用行为,而切点定义了需要拦截的方法集合。Spring Boot的AOP通过在应用程序运行时动态地将切面织入到切点定义的方法集合中,从而实现了对方法的拦截和增强。

Spring Boot的AOP支持基于注解和XML配置两种方式。在基于注解的AOP中,开发人员可以使用Spring提供的一系列注解来定义切面和切点,例如@Before、@After、@Around、@Pointcut等注解。在基于XML配置的AOP中,开发人员可以使用Spring提供的XML配置来定义切面和切点。

总的来说,Spring Boot的AOP是一种重要的编程范式,它能够帮助开发人员实现诸如事务管理、安全控制、日志记录、性能监控等方面的功能,提高应用程序的可维护性、可扩展性和可重用性。

AOP实例

假设我们需要在应用程序中记录所有方法的调用时间,并将其输出到控制台上。我们可以通过以下步骤来实现:

创建一个自定义注解@LogExecutionTime,用于标记需要记录执行时间的方法。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

创建一个切面类LogAspect,用于在方法调用前和调用后记录执行时间并输出到控制台上。

@Aspect
@Component
public class LogAspect {@Around("@annotation(LogExecutionTime)")public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {long startTime = System.currentTimeMillis();Object result = joinPoint.proceed();long endTime = System.currentTimeMillis();long executionTime = endTime - startTime;System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms");return result;}
}

在上面的代码中,我们使用了@Around注解来定义了一个环绕通知,它会拦截所有使用了@LogExecutionTime注解的方法。在环绕通知中,我们通过ProceedingJoinPoint对象来获取方法的执行时间,并将执行时间输出到控制台上。

在需要记录执行时间的方法上添加@LogExecutionTime注解。

@Service
public class UserServiceImpl implements UserService {@Override@LogExecutionTimepublic User getUserById(Long id) {// Some business logic here}
}

在上面的代码中,我们在getUserById方法上添加了@LogExecutionTime注解,这样在方法执行时,Spring Boot AOP会拦截该方法,并调用切面中定义的环绕通知来记录执行时间。

最后,我们启动应用程序并调用getUserById方法,就可以在控制台上看到类似以下的输出:

public com.example.UserService.getUserById(Long) executed in 12ms

总的来说,Spring Boot AOP可以帮助开发人员实现诸如日志记录、性能监控、事务管理等方面的功能,提高应用程序的可维护性、可扩展性和可重用性。


这是一篇用ChatGPT写的一篇博客,今天上午的时候有一位家庭主妇朋友突然来问我关于ChatGPT,我也是最近刚听到了这个词(来自老高与小沫),于是一顿查资料,一顿操作,然后搞了个账号。
另外我还测试了一下使用ChatGPT写代码,只要要求写的详细,基本都能完成需求,但是只可以完成比如一个Java类或者一个Vue页面,不可以实现一整个的项目。


http://www.ppmy.cn/news/966418.html

相关文章

vue 中实现当hasrights为true时处理amt字段,大于0返回+0,小于0返回-0,当hasrights为false时返回***

{"hasRights": true,"amt": "0" } 可以使用Vue的计算属性来实现这个需求。首先,在data中定义hasRights和amt两个属性,然后定义一个计算属性result,根据hasRights和amt的值来计算出对应的结果。 示例代码如下&a…

chatGPT对大学生来说有什么利好?

大学生可以利用ChatGPT进行以下方面的应用: 作为一个辅助工具,使用ChatGPT来生成论文题目、摘要和参考文献等,提高写作效率和质量。 在学习过程中,可以使用ChatGPT来生成笔记、练习题和测试题目,帮助记忆和巩固知识点。…

直流电源与交流电源的区别有哪些

以12V直流电源和12V交流电源为例,从损耗、使用、测量、安全等几个方面来分析直流与交流电源的区别。 损耗 直流电的传输损耗大,所以不适合长距离传输, 交流电的传输损耗小,所以适合长距离传输, 使用 直流电电压稳定,无白躁声,故适於电子产品使用(例如电视机,收音机…

《花雕学AI》21:ChatGPT能否应对脑筋急转弯?逻辑推理和创造性思维的大考验!

当我们谈到脑筋急转弯时,很多人都会感到兴趣和好奇。脑筋急转弯是一种智力游戏,可以锻炼我们的思维能力以及解决问题的能力。然而,对于许多人来说,脑筋急转弯也是一项相当具有挑战性的任务。在这个过程中,我们需要运用…

chatGPT真的完美吗?“翻车”现场频发,它的智商是9岁小孩儿?

前面我们说到,一款基于chatGPT的插件【Merlin】,聊天式感受强大AI能力 ,在我们惊呼chatGPT强大能力的时候,它就真的很完美吗? NO!! 尽管已经chatGPT已经开始进入商用阶段,各大互联…

智商狂飙,问了ChatGPT几个数据库问题后,我的眼镜掉了

最近,ChatGPT火爆全网,介绍其产品、公司、作者、技术和应用等方面信息,占据着整个互联网,似乎不谈GPT好像就落伍了。作为一个关注数据库行业的公众号,我们问了GPT几个数据库问题,结果让人大跌眼镜&#xff…

大数据学习路线

文章目录 一,Hadoop二,MapReduce三,HDFS四,Hive 一,Hadoop 二,MapReduce 三,HDFS 四,Hive Hive学习

数字人+ChatGPT强强联手能擦出什么火花?

随着元宇宙概念的快速发展,以数字人ChatGPT为形式的创作方式正在颠覆传统视频创作方式,并在市场上呈现快速增长的态势。根据新榜的报道,目前已经有多位大V使用虚拟数字人来协助完成短视频制作,并且值得一提的是,这些视…