一、前言
这篇文章主要介绍spring中AOP相关的知识。
二、内容
1.AOP简介
AOP概念
AOP是面向切面编程(Aspect Oriented Programming)的简写,就像我们之前学习过面向对象编程(OOP,Object Oriented Programming),同样是一种程序设计思想,其作用是,在无需修改代码的前提下,对业务增加统一的功能,比如日志记录,权限控制,事务管理等,使得代码更加解耦,提高开发效率。
基本思想
连接点:在spring中连接点可以指某个类中所有的方法
切入点:类中需要做功能增强的方法
通知:包含功能增强的代码的方法
通知类:通知所在的类
切面:建立切入点与通知之间的联系
2.AOP入门案例
步骤
1.准备工作(事先准备好dao和实现类)
2.导入AOP相关依赖
<!-- AOP相关依赖--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> </dependency> <!-- spring框架(包含了spring-aop)--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency>
3.使用@Component和@Aspect编写通知类(切面类)
4.使用@PointCut在方法壳上定义切入点(实际是方法)
5.使用@Before/@After注解定义切面
6.使用@EnableAspectJAutoProxy注解告知SpringConfig类开启AOP支持
7.运行主类查看结果
由此可见,在insert()方法执行前执行了通知,AOP执行成功。
3.AOP执行流程
1.spring容器启动
2.读取切面中的切入点方法
3.初始化bean,并判断bean中的方法是否匹配到切入点
(1)匹配成功
运行结果:
(2)匹配失败
运行结果:
4.总结:
4.切入点表达式
1.标准格式
2.使用通配符* … +
举例:
(1)使用*
(2)使用…
(3)使用+
3.书写规范
5.通知类型
首先准备好了dao-BookDao和实现类BookDaoImpl,以及通知类Advice
public interface BookDao { void insert(); int select(); }
@Repository public class BookDaoImpl implements BookDao { @Override public void insert() { System.out.println("book dao insert ..."); // int i = 1/0; } @Override public int select() { System.out.println("book dao select ..."); return 68; } }
为两个方法定义好了切入点
@Pointcut("execution(void demo7.dao.BookDao.insert())") private void fn1() { } @Pointcut("execution(int demo7.dao.BookDao.select())") private void fn2() { }