我正在攻读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
答案 0 :(得分:3)
长问题,简单回答:您可以通过名称来引用切入点,因此如果您有多个建议引用相同的切入点,您只需要在一个地方更改它并保持引用不变。这类似于在Java代码中使用变量与文字。
看看你自己的例子:两个建议trackChange
和logFailure
都使用相同的切入点,这非常方便。干 - 不要重复自己。 ;-)有时切入点比你的更复杂,它们可以在复杂的场景中跨越多行。