如果说IoC是Spring的核心,那么面向切面编程就是Spring最重要的功能之一。我们用一个操作数据库事务的案例来演示一下,因为AOP单从理论上讲太过于抽象。但先了解一下术语,再去看案例的解释就能有一定的了解。里面操作数据库我选择用外部工具dbutils。(代码量大,但是在后面都会一直用这个案例来修改)
术语
切面(Aspect):所有需要增强的方法。
通知(Advice):切面开启后,切面的方法的调用顺序定义。
引入(Introduction):引入允许我们在现有的类里添加自定义的类和方法。
切点(PointCut):这是一个告诉Spring AOP在什么时候启动拦截并织入对应的流程。
连接点(join point):需要拦截的东西。
织入(Weaving):生成一个代理对象并将切面内容放入流程中的过程。
案例
Maven配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
新建IAccountDao接口类
package com.dao;
import com.domain.Account;
import java.util.List;
//账户的持久层接口
public interface IAccountDao {
//查询所有
List<Account> findAllAccount();
//查询一个
Account findAccountById(Integer id);
//保存操作
void saveAccount(Account account);
//更新操作
void updateAccount(Account account);
//删除操作
void deleteAccount(Integer id);
//根据名称查询账户
Account findAccountByName(String accountName);
}
AccountDao实现类
package com.dao.impl;
import com.dao.IAccountDao;
import com.domain.Account;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.util.List;
//账户的持久层实现类
public class AccountDaoImpl implements