基于 XML 的配置声明AOP
- 除了使用 AspectJ 注解声明切面, Spring 也支持在 Bean 配置文件中声明切面. 这种声明是通过 aop schema 中的 XML 元素完成的.
- 正常情况下, 基于注解的声明要优先于基于 XML 的声明. 通过 AspectJ 注解, 切面可以与 AspectJ 兼容, 而基于 XML 的配置则是 Spring 专有的. 由于 AspectJ 得到越来越多的 AOP 框架支持, 所以以注解风格编写的切面将会有更多重用的机会.
声明切面
①.当使用xml声明切面时,需要在 <beans> 根元素中导入aop工作空间 aop Schema
②.在 Bean 配置文件中, 所有的 Spring AOP 配置都必须定义在 <aop:config> 元素内部. 对于每个切面而言, 都要创建一个 <aop:aspect> 元素来为具体的切面实现引用后端 Bean 实例.
③.切面 Bean 必须有一个标示符, 供 <aop:aspect> 元素引用
<!-- 配置切面的bean -->
<bean id="loggerAspectJ"
class="com.xyc.spring.aop.xml.LoggerAspectJ"></bean>
<bean id="viladationAspectj"
class="com.xyc.spring.aop.xml.ViladationAspectj"></bean>
<!-- 配置AOP -->
<aop:config>
<!-- 配置切面及通知 -->
<aop:aspect ref="loggerAspectJ" order="2">
</aop:aspect>
<aop:aspect ref="viladationAspectj" order="1">
</aop:aspect>
</aop:config>
声明切入点
①.切入点使用 <aop:pointcut> 元素声明
②.切入点必须定义在 <aop:aspect> 元素下, 或者直接定义在 <aop:config> 元素下.
- 定义在 <aop:aspect> 元素下: 只对当前切面有效
- 定义在 <aop:config> 元素下: 对所有切面都有效
③.基于 XML 的 AOP 配置不允许在切入点表达式中用名称引用其他切入点.
<!-- 配置切点表达式 -->
<aop:pointcut expression="execution(* com.xyc.spring.aop.xml.Calculator.*(..))" id="pointcut"/>
声明通知
- 在 aop