1.AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构
作用:在不惊动原始设计的基础上为其进行功能增强
2.AOP核心概念
*连接点:程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等,在springAOP中,可以理解为方法的执行
切入点:匹配连接点的式子
通知:在切入点出执行的操作,也就是共性功能
通知类:定义通知的类
切面:描述通知与切入点的对应关系
3.AOP入门案例
1.导入AOP相关坐标
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency>
2.定义接口和接口实现类
public interface BookDao { public void save(); public void update(); }
@Repository public class BookDaoImpl implements BookDao { @Override public void save() { System.out.println(System.currentTimeMillis()); System.out.println("book dao save..."); } @Override public void update() { System.out.println("book dao update"); } }
3.创建通知类
public class MyAdvice { public void method(){ System.out.println(System.currentTimeMillis()); } }
4.定义切入点
@Pointcut("execution(void com.itheima.dao.BookDao.update())") private void pt(){}
切入点依托一个不具有实际意义的方法进行
5.绑定切入点和通知的关系,并指定通知添加到原始连接点的具体执行位置
@Component @Aspect public class MyAdvice { @Pointcut("execution(void com.itheima.dao.BookDao.update())") private void pt(){} @Before("pt()") public void method(){ System.out.println(System.currentTimeMillis()); } }
个人理解:在这里创建切入点,在执行update()函数后,切入执行pt()函数,但是由于@before注解,在执行pt()函数之前要先执行method()方法,以此来达到了AOP的思想
6.开启spring对AOP注解驱动支持
@Configuration @ComponentScan("com.itheima") @EnableAspectJAutoProxy public class SpringConfig { }