04 Spring: 08.面向切面编程 AOP&&6 四种常用通知类型

本文深入探讨了Spring中的面向切面编程(AOP),介绍了AOP的基本概念、作用和优势,如减少重复代码、提高开发效率。讲解了Spring AOP的术语,如连接点、切入点、通知等,并详细阐述了四种通知类型:前置、后置、异常和最终通知。此外,文章还涵盖了基于XML和注解的AOP配置,提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通知的类型
通知的四种类型

 

08.面向切面编程 AOP

2 spring中的aop术语和细节、3 spring基于XML的AOP-编写必要的代码、4 spring基于XML的AOP-配置步骤

5 切入点表达式的写法、6 四种常用通知类型、7 通用化切入点表达式、8 spring中的环绕通知

9 spring基于注解的AOP配置

第1章 AOP 的相关概念[理解]

1.1.1 什么是 AOP

AOP: 全称是 Aspect Oriented Programming 即: 面向切面编程。

1.1.2 AOP 的作用及优势
作用:
在程序运行期间,不修改源码对已有方法进行增强。
优势:
减少重复代码
提高开发效率
维护方便
1.1.3 AOP 的实现方式

使用动态代理技术

1.2 AOP的具体应用

1.2.1 案例中问题

下面是客户的业务层实现类。我们能看出什么问题吗?
问题就是:
事务被自动控制了。换言之,我们使用了 connection 对象的 setAutoCommit(true)
此方式控制事务,如果我们每次都执行一条 sql 语句,没有问题,但是如果业务方法一次要执行多条 sql
语句,这种方式就无法实现事务控制功能了。(不符合事务的一致性)
 

第2章 Spring 中的 AOP[掌握]

2 spring中的aop术语和细节

Joinpoint(连接点):
所谓连接点是指那些被拦截到的点。这些点指的是方法,因为 spring 只支持方法类型的连接点。(服务层中的方法)
Pointcut(切入点):
所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。(服务层中期望被增强的方法)

Advice(通知):
所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。(  )
通知的类型: 前置通知,后置通知,异常通知,最终通知,环绕通知。

Introduction(引介):
引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方
法或 Field。
Target(目标对象):
代理的目标对象。即被代理的对象。

Weaving(织入):
是指把增强应用到目标对象来创建新的代理对象的过程。spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。
Proxy(代理) :
一个类被 AOP 织入增强后,就产生一个结果代理类。

Aspect(切面):
是切入点和通知(引介)的结合。
 

3 spring基于XML的AOP-编写必要的代码

代码:

day03_eesy_03springAOP

  pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.15.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.7</version>
        </dependency>
    </dependencies>
IAccountService
package com.itheima.service;

/**
 * 账户的业务层接口
 */
public interface IAccountService {

    /**
     * 模拟保存账户
     */
    void saveAccount();

    /**
     * 模拟更新账户
     * @param i
     */
    void updateAccount(int i);

    /**
     * 模拟删除账户
     * @return
     */
    int deleteAccount();
}

  AccountServiceImpl

package com.itheima.service.impl;

import com.itheima.service.IAccountService;

/**
 * 账户的业务层实现类
 */
public class AccountServiceImpl implements IAccountService {


    public void saveAccount() {
        System.out.println("执行了保存");
    }


    public void updateAccount(int i) {
        System.out.println("执行了更新"+i);
    }


    public int deleteAccount() {
        System.out.println("执行了删除");
        return 0;
    }
}

  Logger

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康冕峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值