![]()
通知的四种类型
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