如何在XML格式tx:advice中配置多个pointcut且不使用||拼接表达式
问题解答
1. 单个advice绑定多个pointcut的实现方案(不使用||运算符)
你当前的写法本身就是符合Spring AOP规范的正确实现:
- 同一个
<tx:advice>可以被多个<aop:advisor>同时引用,每个advisor绑定不同的pointcut,运行效果和将多个pointcut用||拼接后绑定单个advisor完全一致,不存在功能或性能差异。 - 这种实现天然不需要在pointcut表达式中使用||运算符,完全符合你的要求。
2. 切点表达式是否支持括号编写复合条件
完全支持,AspectJ切点表达式本身允许使用()调整逻辑运算的优先级,同时支持&&(与)、||(或)、!(非)三种逻辑运算符组合条件:
- 你提供的示例写法本身符合语法规则,唯一需要注意的是:在XML配置文件中使用
&&时需要对&符号做转义,写成&&,否则会触发XML解析错误。 - 正确的XML写法示例:
<aop:pointcut id="complexPointcut" expression="( execution(* com.service.svc1.*(..)) && bean(bean1) ) || ( execution(* com.service.svc1.*(..)) || bean(bean2) )" />
内容的提问来源于stack exchange,提问作者just_code_dog
相关产品推荐
相关产品推荐

