![](https://csdnimg.cn/release/download_crawler_static/86390753/bg1.jpg)
/**
* AOP:【动态代理】
* 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方
式;
*
* 1、导入 aop 模块;Spring AOP:(spring-aspects)
* 2、定义一个业务逻辑类(MathCalculator);在业务逻辑运行的时候将日志进行打印(方
法之前、方法运行结束、方法出现异常,xxx)
* 3 、 定 义 一 个 日 志 切 面 类 ( LogAspects ): 切 面 类 里 面 的 方 法 需 要 动 态 感 知
MathCalculator.div 运行到哪里然后执行;
* 通知方法:
* 前置通知(@Before):logStart:在目标方法(div)运行之前运行
* 后置通知(@After):logEnd:在目标方法(div)运行结束之后运行(无论方法正
常结束还是异常结束)
* 返回通知(@AfterReturning):logReturn:在目标方法(div)正常返回之后运行
* 异常通知(@AfterThrowing):logException:在目标方法(div)出现异常以后运行
* 环 绕 通 知 (@Around) : 动 态 代 理 , 手 动 推 进 目 标 方 法 运 行
(joinPoint.procced())
* 4、给切面类的目标方法标注何时何地运行(通知注解);
* 5、将切面类和业务逻辑类(目标方法所在类)都加入到容器中;
* 6、必须告诉 Spring 哪个类是切面类(给切面类上加一个注解:@Aspect)
* [7]、给配置类中加 @EnableAspectJAutoProxy 【开启基于注解的 aop 模式】
* 在 Spring 中很多的 @EnableXXX;
*
* 三步:
* 1)、将业务逻辑组件和切面类都加入到容器中;告诉 Spring 哪个是切面类(@Aspect)
* 2)、在切面类上的每一个通知方法上标注通知注解,告诉 Spring 何时何地运行(切入
点表达式)
* 3)、开启基于注解的 aop 模式;@EnableAspectJAutoProxy
*
* AOP 原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什
么?】
* @EnableAspectJAutoProxy;
* 1、@EnableAspectJAutoProxy 是什么?
* @Import(AspectJAutoProxyRegistrar.class) : 给 容 器 中 导 入
AspectJAutoProxyRegistrar
* 利用 AspectJAutoProxyRegistrar 自定义给容器中注册 bean;BeanDefinetion
* internalAutoProxyCreator=AnnotationAwareAspectJAutoProxyCreator
*
* 给容器中注册一个 AnnotationAwareAspectJAutoProxyCreator;
*
* 2、 AnnotationAwareAspectJAutoProxyCreator:
* AnnotationAwareAspectJAutoProxyCreator