8.4.6 基于XML配置文件的管理方式
除了前面介绍的基于JDK1.5
的注解方式来定义切面、切入点和增强处理外, Spring AOP
也允许直接使用XML
配置文件来定义管理它们
如果应用中没有使用JDK1.5
,那就只能选择使用XML
配置方式了, Spring2
提供了一个aop:
命名空间来定义切面、切入点和增强处理
实际上,使用XML
配置方式与前面介绍的@AspectJ
方式的实质是一样的,同样需要指定相关信息:配置切面
、切入点
、增强处理
所需要的信息完全一样,只是提供这些信息的位置不同而已。使用XML
配置方式时是通过XML
文件来提供这些信息的;而使用@AspectJ
方式时则通过注解来提供这些信息。
相比之下,使用XML
配置方式有如下几个优点。
- 如果应用没有使用
JDK1.5
以上版本,那么应用只能使用XML
配置方式来管理切面、切入点和增强处理等。 - 采用
XML
配置方式时对早期的Spring
用户来说更加习惯,而且这种方式允许使用纯粹的POJO
来支持AOP
。当使用AOP
作为工具来配置企业服务时,XML
会是一个很好的选择。 - 当使用
XML
风格时,可以在配置文件中清晰地看出系统中存在哪些切面
使用XML
配置方式,存在如下几个缺点。
- 使用
XML
配置方式不能将切面、切入点、增强处理等封装到一个地方。如果需要査看切面、切入点、增强处理,必须同时结合Java
文件和XML
配置文件来査看;但使用@AspectJ
时,则只需一个单独的类文件即可看到切面、切入点和增强处理的全部信息。 XML
配置方式比@AspectJ
方式有更多的限制:仅支持"singleton"
切面Bean
,不能在XML
中组合多个命名连接点的声明。
除此之外,@AspectJ
切面还有一个优点,就是能被Spring AOP
和AspectJ
同时支持,如果有一天需要将应用改为使用Aspect
.来实现AOP
,使用@Aspect
将非常容易迁移到基于Aspect
.的AOP
实现中。相比之下,选择使用@AspectJ
风格会有更大的吸引力。
在Spring
配置文件中,所有的切面、切入点和增强处理都必须定义在<aop:config>
元素内部。<beans>
元素下可以包含多个<aop:config>
元素,一个<aop:config>
可以包含pointcut
、 advisor
和aspect
元素,且这三个元素必须按照这顺序来定义。关于<aop:config>
元素所包含的子元素如图8.17所示。
这里的图太模糊了,先不贴图
aop:config元素配置和自动代理不能混用
使用<aop:config>
方式进行配置时,可能与Spring
的自动代理方式相冲突,例如使用<aop:aspect-autoproxy>
或类似方式显式启用了自动代理,则可能会导致出现问题(如有些增强处理没有被织入)。因此建议:要么全部使用<aop:config>
配置方式,要么全部使用自动代理方式,不要两者混合使用。
原文链接: 8.4.6 基于XML配置文件的管理方式