spring
IntelliJ
简介(在AspectJ中称为类型间声明)使方面能够声明建议对象实现给定接口,并代表这些对象提供该接口的实现。
您可以使用@DeclareParents注释进行介绍。此批注用于声明匹配类型具有新父级(因此名称)。例如,给定一个名为interface的接口UsageTracked和该接口的实现DefaultUsageTracked,以下方面声明服务接口的所有实现者也实现了UsageTracked接口(例如,通过JMX公开统计信息):
要实现的接口由注释字段的类型确定。注释的 value属性@DeclareParents是AspectJ类型模式。任何匹配类型的bean都实现了该UsageTracked接口。请注意,在前面示例的before advice中,服务bean可以直接用作UsageTracked接口的实现。如果以编程方式访问bean,您将编写以下内容:
默认情况下,应用程序上下文中的每个方面都有一个实例。AspectJ将其称为单例实例化模型。可以使用备用生命周期定义方面。Spring支持AspectJ的perthis和pertarget 实例化模型(percflow, percflowbelow,和pertypewithin目前不支持)。您可以perthis通过perthis在@Aspect 注释中指定子句来声明方面。请考虑以下示例:
因为我们想要重试操作,所以我们需要使用around建议,以便我们可以proceed多次调用。以下清单显示了基本方面的实现:
相应的Spring配置如下:
为了优化方面以便它只重试幂等操作,我们可以定义以下 Idempotent注释:
然后,我们可以使用注释来注释服务操作的实现。对方面进行更改以仅重试幂等操作涉及改进切入点表达式,以便只有@Idempotent操作匹配,如下所示: