gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:32:31 25 4
gpt4 key购买 nike

我正在学习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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com