Spring AOP究竟如何命名切入点?用什么?

时间:2014-12-11 11:50:50

标签: 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 的方法。

它将建议定义为 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” />

与第一种配置一样,切入点仍与某些详细设置方法相关(但在这种情况下,建议分别是返回后后投掷

明确的建议 trackChange() logFailure()方法在 example.PropertyChangeTracker中定义强>上课。

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

TNX

1 个答案:

答案 0 :(得分:3)

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

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