Spring AOP面向切面编程简单概述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


Spring AOP-Spring面向切面编程概述

一、AOP?

1.什么是 AOP

AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
在这里插入图片描述
所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。

2.为什么需要 AOP?

想象下面的场景,开发中在多个模块间有某段重复的代码,我们通常是怎么处理的?显然,没有人会靠“复制粘贴”吧。在传统的面向过程编程中,我们也会将这段代码,抽象成一个方法,然后在需要的地方分别调用这个方法,这样当这段代码需要修改时,我们只需要改变这个方法就可以了。然而需求总是变化的,有一天,新增了一个需求,需要再多出做修改,我们需要再抽象出一个方法,然后再在需要的地方分别调用这个方法,又或者我们不需要这个方法了,我们还是得删除掉每一处调用该方法的地方。实际上涉及到多个地方具有相同的修改的问题我们都可以通过 AOP 来解决。

3.AOP 实现分类

AOP 要达到的效果是,保证开发者不修改源代码的前提下,去为系统中的业务组件添加某种通用功能。AOP 的本质是由 AOP 框架修改业务组件的多个方法的源代码,看到这其实应该明白了,AOP 其实就是前面一篇文章讲的代理模式的典型应用。
按照 AOP 框架修改源代码的时机,可以将其分为两类:

  • 静态 AOP 实现, AOP 框架在编译阶段对程序源代码进行修改,生成了静态的 AOP 代理类(生成的 *.class文件已经被改掉了,需要使用特定的编译器),比如 AspectJ。
  • 动态 AOP 实现, AOP 框架在运行阶段对动态生成代理对象(在内存中以 JDK 动态代理,或 CGlib 动态地生成 AOP代理类),如 SpringAOP。
  • 在这里插入图片描述

4.AOP概念

  • 通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
  • 连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
  • 切点(PointCut): 可以插入增强处理的连接点。
  • 切面(Aspect): 切面是通知和切点的结合。
  • 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
  • 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。概念看起来总是有点懵,不同的参考书籍上翻译还不一样,所以需要慢慢在应用中理解。

通知(Advice)的类型:

  • 前置通知(Before advice):在某个连接点(Join point)之前执行的通知,但这个通知不能阻止连接点的执行(除非它抛出一个异常)。
  • 返回后通知(After returning advice):在某个连接点(Join point)正常完成后执行的通知。例如,一个方法没有抛出任何异常正常返回。
  • 抛出异常后通知(After throwing advice):在方法抛出异常后执行的通知。
  • 后置通知(After(finally)advice):当某个连接点(Join point)退出的时候执行的通知(不论是正常返回还是发生异常退出)。
  • 环绕通知(Around advice):包围一个连接点(Join point)的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。

二、Spring AOP的使用

1.方法一:使用原生态Spring API接口

代码如下(示例):

配置pom.xml

<dependencies>
        <!--    AOP-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>

        <!--    Spring框架依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.14.RELEASE</version>
        </dependency>
    </dependencies>

创建接口(MasterService )

随机写几个方法

package com.java.ym.service;

/**
 * @Author: YuMi
 * @Date: 2020/10/9 11:00
 * ----------------------
 * @Comments:
 */
public interface MasterService {
   
    void add();
    void delete();
    void update();
    void select();
}

接口实现类(MasterServiceImpl )

package com.java.ym.service.impl;

import com.java.ym.service.MasterService;

/**
 * @Author: YuMi
 * @Date: 2020/10/9 11:02
 * ----------------------
 * @Comments:
 */
public class MasterServiceImpl implements MasterService {
   
    @Override
    public void add() {
   
        System.out.println("增加");
    }

    @Override
    public void delete() {
   
        System.out.println("删除");
    }

    @Override
    public void update() {
   
        System.out.println("修改");
    }

    @Override
    public void select() {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一种轻量级的、非侵入式的开发方式,通过使用依赖注入和面向切面编程等特性,简化了Java应用程序的开发。 Spring框架的核心特性包括: 1. 控制反转(IoC):Spring通过控制反转实现了对象之间的解耦。它将对象的创建和依赖关系的管理交给了Spring容器,开发者只需要定义好对象的配置信息,Spring容器就会负责创建和管理这些对象。 2. 依赖注入(DI):Spring使用依赖注入来实现对象之间的依赖关系。开发者只需要在对象中定义好需要注入的依赖,Spring容器就会自动将依赖注入到对象中,无需手动管理对象之间的依赖关系。 3. 面向切面编程AOP):Spring提供了面向切面编程的支持,可以将与业务逻辑无关的横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,提高了代码的模块化和可重用性。 4. 容器管理:Spring提供了一个容器,用于管理应用程序中的各个组件。容器负责创建和管理对象的生命周期,并提供了一些额外的功能,如事件发布、国际化支持等。 5. 数据访问支持:Spring提供了对各种数据访问技术的支持,包括JDBC、ORM框架(如Hibernate、MyBatis)、事务管理等。 6. Web开发支持:Spring提供了对Web开发的支持,包括MVC框架、RESTful服务、WebSocket等。 7. 测试支持:Spring提供了对单元测试和集成测试的支持,可以方便地进行测试驱动开发。 总之,Spring框架通过提供一系列的功能和特性,简化了Java应用程序的开发,提高了代码的可维护性和可测试性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值