工作流程
- Spring容器启动
- 读取所有切面中的切入点
@Pointcut("execution(void com.itheima.dao.BookDao.update())")
private void pt(){}
//这样才算配置了 切入点
@After("pt()")
public void method(){
System.out.println(System.currentTimeMillis());
}
- 初始化 bean(原始对象、目标对象),判定 bean 对应的类中的方法是否匹配到任意切入点
- 匹配失败,创建对象
- 匹配成功,创建 bean 的 代理对象
- 获取 bean 执行方法
- 获取 bean,调用方法并执行,完成操作
- 获取的 bean 是代理对象,根据代理对象的运行模式运行原始方法与增强方法,完成操作。
核心概念
目标对象(Target):原始功能(没加上共性功能)对应的类产生的对象。这种对象是无法直接完成最终工作的
代理(Proxy):目标对象 无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现。