8.4.6 基于XML配置文件的管理方式

8.4.6 基于XML配置文件的管理方式

除了前面介绍的基于JDK1.5的注解方式来定义切面、切入点和增强处理外, Spring AOP也允许直接使用XML配置文件来定义管理它们
如果应用中没有使用JDK1.5,那就只能选择使用XML配置方式了, Spring2提供了一个aop:命名空间来定义切面、切入点和增强处理
实际上,使用XML配置方式与前面介绍的@AspectJ方式的实质是一样的,同样需要指定相关信息:配置切面切入点增强处理所需要的信息完全一样,只是提供这些信息的位置不同而已。使用XML配置方式时是通过XML文件来提供这些信息的;而使用@AspectJ方式时则通过注解来提供这些信息。
相比之下,使用XML配置方式有如下几个优点。

  1. 如果应用没有使用JDK1.5以上版本,那么应用只能使用XML配置方式来管理切面、切入点和增强处理等。
  2. 采用XML配置方式时对早期的Spring用户来说更加习惯,而且这种方式允许使用纯粹的POJO来支持AOP。当使用AOP作为工具来配置企业服务时,XML会是一个很好的选择。
  3. 当使用XML风格时,可以在配置文件中清晰地看出系统中存在哪些切面

使用XML配置方式,存在如下几个缺点。

  1. 使用XML配置方式不能将切面、切入点、增强处理等封装到一个地方。如果需要査看切面、切入点、增强处理,必须同时结合Java文件和XML配置文件来査看;但使用@AspectJ时,则只需一个单独的类文件即可看到切面、切入点和增强处理的全部信息。
  2. XML配置方式比@AspectJ方式有更多的限制:仅支持"singleton"切面Bean,不能在XML中组合多个命名连接点的声明。

除此之外,@AspectJ切面还有一个优点,就是能被Spring AOPAspectJ同时支持,如果有一天需要将应用改为使用Aspect.来实现AOP,使用@Aspect将非常容易迁移到基于Aspect.的AOP实现中。相比之下,选择使用@AspectJ风格会有更大的吸引力。
Spring配置文件中,所有的切面、切入点和增强处理都必须定义在<aop:config>元素内部。<beans>元素下可以包含多个<aop:config>元素,一个<aop:config>可以包含pointcutadvisoraspect元素,且这三个元素必须按照这顺序来定义。关于<aop:config>元素所包含的子元素如图8.17所示。

这里的图太模糊了,先不贴图

aop:config元素配置和自动代理不能混用

使用<aop:config>方式进行配置时,可能与Spring的自动代理方式相冲突,例如使用<aop:aspect-autoproxy>或类似方式显式启用了自动代理,则可能会导致出现问题(如有些增强处理没有被织入)。因此建议:要么全部使用<aop:config>配置方式,要么全部使用自动代理方式,不要两者混合使用。