Spring AOP 实战指南:从入门到精通(1)

米饭13小时前行业资讯9

Spring 框架有两大核心 IoC,AOP。在前面我们已经学习过了 IoC 的相关知识,今天就让我们开始 AOP 的学习。

一、AOP 概述

Aspect Oriented Programming(面向切面编程)。


切面就是指某一类特定问题,所以 AOP 也可以理解为面向特定方法编程。


**AOP 是一种思想,是对某一类事情的集中处理。**Spring AOP 是其中的一种实现方式。

@RequestMapping("/test")
@RestController
@Slf4j
public class TestController {

    @RequestMapping("/t1")
    public void test1(){
        log.info("我是 test1");
    }
}


AOP 的作用:在程序运行期间,在不修改源代码的基础上,对已有方法进行增强(无侵入性:解耦)。


二、Spring AOP 快速入门

我们先通过下面的程序体验下 AOP 的开发,并掌握 Spring 中 AOP 的开发步骤。


2.1 引入 AOP 依赖:

在 pom.xml 文件中添加配置:

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

2.2 编写 AOP 程序:

@Aspect
@Slf4j
@Component
public class TestAspect {
    @Around("execution(* com.example.demo.controller.*.*(..))")
    public Object demo(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("方法执行前执行");
        Object result = joinPoint.proceed();
        log.info("方法执行后执行");
        return result;
    }
}

controller 类:

@RequestMapping("/test")
@RestController
@Slf4j
public class TestController {

    @RequestMapping("/t1")
    public void test1(){
        log.info("我是 test1");
    }
}

调用 controller 中的 test1 方法。

结果如下:

5938fb39c4ce1789a88f899606fc3d9d.png

对程序进行简单的讲解:

  1. @Aspect:标识这是一个切面类。

  2. @Around:环绕通知,在目标方法的前后都会被执行。后面的表达式表示对哪些方法进行增强。

  3. ProceedingJoinPoint.proceed()让原始方法执行。

整个代码划分为三部分。

511150b2fd70f2af2f4394b45a4df1e9.png

通过上面的程序,我们也可以感受到 AOP 面向切面编程的一些优势:

  1. 代码无侵入:不修改原始的业务方法,就可以对原始的业务方法进行了功能的增强或者是功能的改变。

  2. 减少了重复代码。

  3. 提高开发效率。

  4. 维护方便。

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


相关文章

CentOS7 yum安装报错“Could not resolve host: mirrorlist.centos.org; Name or service not known“之解决办法(换源)

CentOS7 yum安装报错“Could not resolve host: mirrorlist.centos.org; Name or service not known“之解决办法(换源)

yum安装出现错误如下:yum install -y wget && wget -O install.sh https://download.bt.cn/install/install...

Docker 基础与实战指南(1)

Docker 基础与实战指南(1)

Docker 可以使项目的部署变得简单,大大减少了运维工作量。即便你对 Linux 不熟悉,你也能轻松部署各种常见软件、Java项目。linux 上安装 docker 这里就不进行讲解,我使用的 li...

Linux--多路转接之epoll

Linux--多路转接之epoll

epoll 是 Linux 下多路复用 I/O 接口 select/poll 的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。它是 Linux 下多路复用 AP...

windows10家庭版禁用Device/Credential Guard解决方案

windows10家庭版禁用Device/Credential Guard解决方案

背景(禁用的原因)在安装Windows版的docker后,由于Windows版本自带虚拟机,折腾完后却发现原来安装的VMware Workstation Pro和Oracle VM VirtualBo...

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃,Kubernetes尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增...

微服务保护和分布式事务(5)

微服务保护和分布式事务(5)

2.3 XA 模式:Seata 支持四种不同的分布式事务解决方案:XATCCATSAGA这里我们以XA模式和AT模式来给大家讲解其实现原理。XA 规范是 X/Open 组织定义的分布式事务处理(DTP...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。