1.基于xml的aop
<context:component-scan base-package="com.atguigu.aop.xml"></context:componentscan>
<aop:config>
<aop:aspect ref="loggerAspect">
<aop:pointcut id="pointCut" expression="execution(*
com.atguigu.aop.xml.CalculatorImpl.*(..))"/>
<aop:before method="beforeMethod" pointcut-ref="pointCut"></aop:before>
<aop:after method="afterMethod" pointcut-ref="pointCut"></aop:after>
<aop:after-returning method="afterReturningMethod" returning="result"
pointcut-ref="pointCut"></aop:after-returning>
<aop:after-throwing method="afterThrowingMethod" throwing="ex" pointcutref="pointCut"></aop:after-throwing>
<aop:around method="aroundMethod" pointcut-ref="pointCut"></aop:around>
</aop:aspect>
<aop:aspect ref="validateAspect" order="1">
<aop:before method="validateBeforeMethod" pointcut-ref="pointCut">
</aop:before>
</aop:aspect>
</aop:config>
2.aop实现思想
①分层架构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e62e00a876e4e369ccb2404f077c9c03.png)
②执行过程
- AspectJ:本质上是静态代理,将代理逻辑“织入”被代理的目标类编译得到的字节码文件,所以最终效果是动态的(植入代码)
- 所以最后再使用时,只需获得ioc容器的目标对象即可直接执行“动态代理对象”(目标对象执行即可)