此篇文章将展示如何将上一篇文章中 Spring AOP 的 AspectJ 注解转成基于XML的配置。对于那些不喜欢注释的开发者,使用JDK1.4,则可以基于XML,而不使用 AspectJ。
和 @Before 功能等价的 AspectJ <aop:before>
<aop:config>
<aop:aspect id="aspectJD" ref="aspectJDemo">
<!-- @Before -->
<aop:pointcut id="pointCutBefore"
expression="execution(* com.angelia.spring.service.ArticleServiceImpl.queryArticleById(..))" />
<aop:before method="before" pointcut-ref="pointCutBefore" />
</aop:aspect>
</aop:config>
和 @After 功能等价的 AspectJ <aop:after>
<aop:config>
<aop:aspect id="aspectJD" ref="aspectJDemo">
<!-- 所有 Advice 共用的切入点 -->
<aop:pointcut id="pointCut"
expression="execution(* com.angelia.spring.service.ArticleServiceImpl.queryArticleById(..))" />
<!-- @After -->
<aop:after method="after" pointcut-ref="pointCut" />
</aop:aspect>
</aop:config>
和 @AfterReturning 功能等价的 <aop:after-returning>
<aop:config>
<aop:aspect id="aspectJD" ref="aspectJDemo">
<!-- 所有 Advice 共用的切入点 -->
<aop:pointcut id="pointCut"
expression="execution(* com.angelia.spring.service.ArticleServiceImpl.queryArticleById(..))" />
<aop:after-returning method="afterReturning" returning="result" pointcut-ref="pointCut" />
</aop:aspect>
</aop:config>
和 @AfterThrowing 功能等价的 <aop:after-throwing>
<aop:config>
<aop:aspect id="aspectJD" ref="aspectJDemo">
<!-- 所有 Advice 共用的切入点 -->
<aop:pointcut id="pointCut"
expression="execution(* com.angelia.spring.service.ArticleServiceImpl.queryArticleById(..))" />
<aop:after-throwing method="afterThrowing" throwing="error" pointcut-ref="pointCut" />
</aop:aspect>
</aop:config>
和 @Around 功能等价的 <aop:after-around>
<aop:config>
<aop:aspect id="aspectJD" ref="aspectJDemo">
<!-- 所有 Advice 共用的切入点 -->
<aop:pointcut id="pointCut"
expression="execution(* com.angelia.spring.service.ArticleServiceImpl.queryArticleById(..))" />
<aop:around method="around" pointcut-ref="pointCut" />
</aop:aspect>
</aop:config>
所有通知的配置
<aop:config>
<aop:aspect id="aspectJD" ref="aspectJDemo">
<!-- 所有 Advice 共用的切入点 -->
<aop:pointcut id="pointCut"
expression="execution(* com.angelia.spring.service.ArticleServiceImpl.queryArticleById(..))" />
<!-- @Before -->
<aop:before method="before" pointcut-ref="pointCut" />
<!-- @After -->
<aop:after method="after" pointcut-ref="pointCut" />
<aop:after-returning method="afterReturning" returning="result" pointcut-ref="pointCut" />
<aop:after-throwing method="afterThrowing" throwing="error" pointcut-ref="pointCut" />
<aop:around method="around" pointcut-ref="pointCut" />
</aop:aspect>
</aop:config>
项目代码链接: https://pan.baidu.com/s/1gA5Rm4yvcpPJmDGUQX70lQ 密码: 259a