java - Spring AOP 命名切入点到底是如何工作的?有何用途?

标签 java spring spring-mvc aop spring-aop

我正在学习Spring Core认证,对AOP命名切入点有以下疑问

例如,我可以将以下代码放入 XML 配置文件中,该文件定义了无名称的 pointut:

<aop:config>
    <aop:aspect ref=“propertyChangeTracker”>
        <aop:before pointcut=“execution(void set*(*))” method=“trackChange”/>
    </aop:aspect>
</aop:config>

<bean id=“propertyChangeTracker” class=“example.PropertyChangeTracker” />

这应该按以下方式工作:

首先,它将切入点定义为名称以set开头且采用单个参数(任何类型)返回void的所有方法

并且将advice定义为example.PropertyChangeTracker类中的trackChange()方法

因此,当在应用程序生命周期中调用 setter 方法时,它会自动调用类 example.PropertyChangeTracker 中的 trackChange() 方法。

好的,这很简单。

现在我有这个 AOP XML 配置,其中包含命名切入点:

<aop:config>
    <aop:pointcut id=“setterMethods” expression=“execution(void set*(*))”/>

    <aop:aspect ref=“propertyChangeTracker”>
        <aop:after-returning pointcut-ref=“setterMethods” method=“trackChange”/>
        <aop:after-throwing pointcut-ref=“setterMethods” method=“logFailure”/>
    </aop:aspect>
</aop:config>

<bean id=“propertyChangeTracker” class=“example.PropertyChangeTracker” />

与第一个配置一样,切入点仍然与某些特定的setter方法相关(但在这种情况下,建议分别是返回后抛出后

定义的建议example.PropertyChangeTracker中定义的trackChange()logFailure()方法强>类。

与第一个示例不同,这两个建议定义了一个由 pointcut-ref=“setterMethods” 的值表示的名称。但到底是什么意思呢?可以用来做什么?

Tnx

最佳答案

问题很长,答案很简单:您可以通过名称引用切入点,因此,如果您有多个引用同一切入点的建议,则只需在一处更改它并保持引用不变。这类似于在 Java 代码中使用变量与文字。

看看你自己的例子:两个通知trackChangelogFailure都使用相同的切入点,这相当方便。 DRY——不要重复自己。 ;-) 有时切入点比你的更复杂一点,它们在复杂的场景中可以跨越多行。

关于java - Spring AOP 命名切入点到底是如何工作的?有何用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422220/

相关文章:

java - 在 Eclipse 中运行 wicket 项目时绑定(bind)异常

java - 三参数运算符 : Local variable may not have been initialized

Java编码审查词

java - 如何使用 @EmbeddedId 使用 Spring Data REST 和 ConversionService?

java - 如何在同一版本的flyway中执行多个sql脚本

java - Hibernate 和 Raw JDBC 应用程序的混合正在锁定

java - Spring 数据 JPA : Filtering page contents results in a smaller page than requested

java - Spring Autowiring 实现类

java - 当 in 包含括号和 OR 时,HQL 查询出错

java - Spring mvc 3中ModelAndView类的功能