当前位置: 首页 > 知识库问答 >
问题:

Spring AOP名为切入点到底是如何工作的?用于什么?

欧盛
2023-03-14

我正在为Spring Core认证而学习,我对名为pointcut的AOP有以下疑问

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

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

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

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

好吧,这很简单。

<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” />

共有1个答案

云胤
2023-03-14

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

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

 类似资料:
  • 因此我知道JMS的核心组件是: 消息 目标 连接 会话 MessageProducer MessageConsumer 据我所知,消息是与其他实体(必须使用这些数据的其他产品)发送和共享的,消息可以有不同的形状:TextMessage、ObjectMessage、MapMessage、BytesMessage和StreamMessage。 好的,根据我的理解,JMS核心组件的目的地组件定义了接收消

  • 我们知道主存域很少:年轻的、终生的(旧的gen)和PermGen。 年轻领域分为伊甸园和幸存者(有两个)。 OldGen用于生存的对象。 MaxTenuringThreshold防止对象过早地被最终复制到OldGen空间。这很清楚,也很容易理解。 但是它是如何工作的呢?垃圾回收器如何处理这些在MaxTenuringThreshold之前仍然存在的对象,以何种方式?它们位于何处? 对象被复制回幸存者

  • 我正在学习Spring核心认证,我对Spring如何处理bean生命周期有一些疑问,特别是bean后处理器。 所以我有了这个模式: 我很清楚这意味着什么: 然后在bean创建阶段执行以下步骤: > 每个bean都在缺省情况下被急切地实例化(按照正确的顺序创建,并注入其依赖项)。 在依赖注入之后,每个bean都会经历一个后处理阶段,在这个阶段中可能会进行进一步的配置和初始化。 > 初始化器:如果指示

  • 这是一个简单的错误:我在对象的格式字符串中使用了而不是。但我完全困惑于我的测试结果与错误的格式字符串。 以下代码: @Jan建议依赖toString()方法可能会有问题,所以我定义了一个日期格式,以与上面相同的代码打印。下面是附加输出:

  • 我几乎理解了尾递归是如何工作的,以及它与普通递归之间的区别。我只是不明白为什么它不要求堆栈记住它的返回地址。 在尾递归函数中调用函数本身后没有什么可做的,但对我来说这没有意义。

  • 我从@kriegaex那里得到了一个答案,我无法理解。 我试图理解的切入点表达式如下 据我所知,此表达式将建议使用MyAnnotation注释的任何类或方法 从引用留档中,表达式的格式如下: 基于此格式,以下表达式 可以解释为 建议使用注释的类中的任何方法调用。如果我错了,请纠正我。 对于这个表达式 我无法理解修饰符模式如何可以是MyAnnotation?这是怎么回事?