`
zysnba
  • 浏览: 179871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring Boot AOP实战

 
阅读更多
https://www.cnblogs.com/sgh1023/p/13363679.html
一、为什么需要面向切面编程?
面向对象编程(OOP)的好处是显而易见的,缺点也同样明显。当需要为多个不具有继承关系的对象添加一个公共的方法的时候,例如日志记录、性能监控等,如果采用面向对象编程的方法,需要在每个对象里面都添加相同的方法,这样就产生了较大的重复工作量和大量的重复代码,不利于维护。面向切面编程(AOP)是面向对象编程的补充,简单来说就是统一处理某一“切面”的问题的编程思想。如果使用AOP的方式进行日志的记录和处理,所有的日志代码都集中于一处,不需要再每个方法里面都去添加,极大减少了重复代码。

二、Spring AOP术语
Spring AOP术语

通知(Advice)包含了需要用于多个应用对象的横切行为,完全听不懂,没关系,通俗一点说就是定义了“什么时候”和“做什么”。

连接点(Join Point)是程序执行过程中能够应用通知的所有点。

切点(Poincut)是定义了在“什么地方”进行切入,哪些连接点会得到通知。显然,切点一定是连接点。

切面(Aspect)是通知和切点的结合。通知和切点共同定义了切面的全部内容——是什么,何时,何地完成功能。

引入(Introduction)允许我们向现有的类中添加新方法或者属性。

织入(Weaving)是把切面应用到目标对象并创建新的代理对象的过程,分为编译期织入、类加载期织入和运行期织入。

三、Spring Boot AOP实战
3.1 引入依赖
Spring Boot使用AOP需要添加spring-boot-starter-aop依赖,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

不需要再添加aspectjweaver的依赖了,因为spring-boot-starter-aop包含了aspectjweaver,并且版本是较新的版本,如果在添加老版本(如1.5.4)启动会报错。
Maven依赖

3.2 编写用于拦截的bean
直接定义一个controller,代码如下:

@RestController
public class AopController {

    @RequestMapping("/hello")
    public String sayHello(){
        System.out.println("hello");
        return "hello";
    }
}
3.3 定义切面
Spring采用@AspectJ注解对POJO进行标注,该注解表明该类不仅仅是一个POJO,还是一个切面。切面是切点和通知的结合,那么定义一个切面就需要编写切点和通知。在代码中,只需要添加@Aspect注解即可。

3.3.1 定义切点
切点是通过@Pointcut注解和切点表达式定义的。

@Pointcut注解可以在一个切面内定义可重用的切点。

由于Spring切面粒度最小是达到方法级别,而execution表达式可以用于明确指定方法返回类型,类名,方法名和参数名等与方法相关的部件,并且实际中,大部分需要使用AOP的业务场景也只需要达到方法级别即可,因而execution表达式的使用是最为广泛的。如图是execution表达式的语法:

execution表示在方法执行的时候触发。以“”开头,表明方法返回值类型为任意类型。然后是全限定的类名和方法名,“”可以表示任意类和任意方法。对于方法参数列表,可以使用“..”表示参数为任意类型。如果需要多个表达式,可以使用“&&”、“||”和“!”完成与、或、非的操作。

切点表达式

3.3.2 定义通知
通知有五种类型,分别是:

前置通知(@Before):在目标方法调用之前调用通知

后置通知(@After):在目标方法完成之后调用通知

环绕通知(@Around):在被通知的方法调用之前和调用之后执行自定义的方法

返回通知(@AfterReturning):在目标方法成功执行之后调用通知

异常通知(@AfterThrowing):在目标方法抛出异常之后调用通知

代码中定义了三种类型的通知,使用@Before注解标识前置通知,打印“beforeAdvice...”,使用@After注解标识后置通知,打印“AfterAdvice...”,使用@Around注解标识环绕通知,在方法执行前和执行之后分别打印“before”和“after”。这样一个切面就定义好了,代码如下:

@Aspect
@Component
public class AopAdvice {

    @Pointcut("execution (* com.shangguan.aop.controller.*.*(..))")
    public void test() {

    }

    @Before("test()")
    public void beforeAdvice() {
        System.out.println("beforeAdvice...");
    }

    @After("test()")
    public void afterAdvice() {
        System.out.println("afterAdvice...");
    }

    @Around("test()")
    public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) {
        System.out.println("before");
        try {
            proceedingJoinPoint.proceed();
        } catch (Throwable t) {
            t.printStackTrace();
        }
        System.out.println("after");
    }

}
3.4 启动测试
完成之后的代码结构如图所示:

代码结构

运行AopApplication,在浏览器访问http://localhost:8080/hello,不出意外,控制台输出如图所示:

控制台输出结果

合抱之木,生于毫末,学习技术也是一个循序渐进的过程。由于博主能力有限,文中可能存在描述不当之处,欢迎指正、补充! 如果文章对您有用,那么请轻轻点个”推荐“,以资鼓励!
分享到:
评论

相关推荐

    spring boot AOP注解方式实现多数据源

    6. **实战示例**:在`demo`项目中,应该包含了从零开始搭建的Spring Boot项目,包含了多数据源配置、AOP切面的定义和使用,以及具体业务方法的实现。通过查看源码,我们可以更直观地理解上述步骤的实现细节。 总结...

    Spring Boot 2.5.0简单学习pdf资料

    在 pom.xml 文件中,我们可以添加依赖项,例如 junit、spring-core、spring-beans、spring-aop 等。 Spring MVC Spring MVC 是 Spring Framework 中的一个模块,提供了基于模型视图控制器(MVC)的Web应用程序开发...

    Spring Boot实战与原理分析视频课程包含14-18

    20 Spring Boot AOP 21 Spring Boot Starter18:31 --快速构建自定义的Spring Boot Starter 22 Spring Boot 日志30:58 --演示了如何在Spring Boot里面使用日志配置,以及logback,log4j2等日志的使用 23 Spring ...

    Spring Cloud+Spring Boot+Git&GitHub;+Spring in action+SpringBoot

    6. **Spring Boot实战**: 这两本关于Spring Boot实战的PDF书籍,由丁雪丰翻译的版本和清晰版,为读者提供了实际操作的指导,包括Spring Boot的基础用法、开发环境配置、测试、部署等方面,是学习和掌握Spring Boot的...

    spring-boot示例项目

    aop|[aop,正则,前置通知,后置通知,环绕通知](https://github.com/smltq/spring-boot-demo/blob/master/aop/HELP.md) data-redis|[lettuce,redis,session redis,YAML配置,连接池,对象存储]...

    Spring 4.X 企业应用 + Spring Boot 实战

    《Spring 4.X 企业应用 + Spring Boot 实战》是一本深入探讨Spring框架与Spring Boot在实际企业级项目中的应用的书籍。这本书旨在帮助开发者掌握这两个核心Java技术,提升他们在现代软件开发中的效率和能力。 ...

    Spring Boot 实战教程,由浅入深详细介绍springboot的使用

    ### Spring Boot 实战教程知识点详解 #### 一、Spring Boot 简介 **1.1 Spring 概述** Spring 是一个开源框架,最初由 Rod Johnson 创建,它为 Java 应用程序提供了一种简化的方式来处理依赖管理和面向切面编程...

    学习spring boot必须要读的书

    《Spring Boot实战》是一本很好的起点,这本书以实践为主,讲解了如何使用Spring Boot创建高效、简洁的项目。书中涵盖了自动配置、起步依赖、Actuator监控以及Spring Boot与各种技术(如数据库、Web服务等)的集成。...

    Spring Boot实战与原理分析视频课程

    Spring Boot实战与原理分析视频课程 主要讲解了spring boot的原理分析--服务注册发现,注解,日志配置等等

    基于深度学习并实战 spring boot 的项目合集(已集成batis-aop、使用Mybatis集成多数据源等).zip

    基于深度学习并实战 spring boot 的项目合集(已集成batis-aop(AOP自定义多数据源)、multi-datasource-mybatis(使用Mybatis集成多数据源)、quartz(定时任务)等).zip基于深度学习并实战 spring boot 的项目合集(已...

    Spring Boot缓存实战 Caffeine示例

    Spring Boot 缓存实战 Caffeine 示例 概述:本文介绍了使用 Spring Boot 实现缓存实战的示例,使用 Caffeine 作为缓存框架。Caffeine 是一个使用 Java 8 重写的 Guava 缓存版本,在 Spring Boot 2.0 中将取代 Guava...

    Spring Boot实战(连接MySQL数据库+使用Spring Data Jpa+配置拦截器及实现跨域访问等)

    Spring Boot实战(连接MySQL数据库+使用Spring Data Jpa+配置拦截器及实现跨域访问+整合Redis使用Docker部署Spring Boot项目+使用AOP的正确姿势+整合Mybatis并完成CRUD操作+整合 thymeleaf+整合 MyBatis (XML 版))

    基于深度学习并实战 spring boot 的项目,成功集成batis-aop(AOP自定义多数据源).zip

    【资源说明】 1、该资源包括项目的全部源码,...基于深度学习并实战 spring boot 的项目,成功集成batis-aop(AOP自定义多数据源)、multi-datasource-mybatis(使用Mybatis集成多数据源)、quartz(定时任务)、rabbit.zip

    尚硅谷Spring Boot(72节视频课程)下载.txt

    5. **Spring框架的功能**:Spring Boot继承了Spring框架的所有强大功能,包括IOC、AOP等。 6. **无代码生成和XML配置**:Spring Boot通过约定和自动配置减少了代码量和配置文件的数量。 ### 学习Spring Boot的...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...

    spring_in_action-sixth-edition.pdf

    Spring 实战包括使用 Spring Boot 构建 Web 应用程序、使用 Spring Data 构建数据访问层、使用 Spring Security 构建安全应用程序等。 10. Spring 生命周期 Spring 生命周期是指 Spring 应用程序从启动到关闭的...

    Java_Spring和Spring Boot课程的实验解决方案.zip

    在本课程实验解决方案中,我们将深入探讨Java的两个核心框架:Spring和Spring Boot。这两个框架在企业级Java应用开发中占据着主导地位,为开发者提供了强大的功能和灵活性。以下是关于Spring和Spring Boot的一些关键...

    一个用于深入学习并实战Spring Boot的项目

    spring boot demo是一个用于深度学习并实战spring boot的项目,目前总共包含66一个集成demo,已经完成了55一个。 该项目已成功集成actuator( 监控)、admin( 可视化监控)、logback( 日志)、aopLog( 通过AOP记录web...

    Spring 实战 (中文第4版) PDF + source code

    6. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建和配置过程,提供了一种快速启动Spring应用的方式,内置Tomcat服务器,支持“开箱即用”。 7. **Spring Cloud**:在分布式系统开发中,Spring Cloud提供...

    java视频教程从零开始ssm项目实战迭代到spring boot架构部署源码

    本视频教程旨在帮助初学者从零开始掌握Java技术,并逐步进阶到能够进行SSM项目实战、迭代,直至熟悉Spring Boot架构的部署与源码分析。 首先,让我们从基础开始。Java是一种面向对象的编程语言,它具有跨平台的特性...

Global site tag (gtag.js) - Google Analytics