【问题标题】:How exactly work Spring AOP named pointcuts? For what are used?Spring AOP 命名切入点究竟是如何工作的?用于什么用途?
【发布时间】:2014-12-11 11:50:49
【问题描述】:

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

例如,我可以将以下代码放入 XML 配置文件中,该文件使用 no name 定义 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” />

在第一个配置中,切入点仍然与一些特定的设置方法相关(但在这种情况下,建议分别是 after-returningafter-throw

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

与第一个示例不同,这 2 个建议定义了一个名称,该名称由 pointcut-ref=“setterMethods” 的值表示。但究竟意味着什么?可以用来做什么?

Tnx

【问题讨论】:

    标签: java spring spring-mvc aop spring-aop


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2020-10-31
      • 1970-01-01
      • 2010-10-02
      • 2010-12-12
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多