多语言展示
当前在线:1044今日阅读:26今日分享:39

简介、Aspect实例化模型、AOP示例

简介、Aspect实例化模型、AOP示例
工具/原料
1

spring

2

IntelliJ

方法/步骤
1

简介(在AspectJ中称为类型间声明)使方面能够声明建议对象实现给定接口,并代表这些对象提供该接口的实现。

2

您可以使用@DeclareParents注释进行介绍。此批注用于声明匹配类型具有新父级(因此名称)。例如,给定一个名为interface的接口UsageTracked和该接口的实现DefaultUsageTracked,以下方面声明服务接口的所有实现者也实现了UsageTracked接口(例如,通过JMX公开统计信息):

3

要实现的接口由注释字段的类型确定。注释的 value属性@DeclareParents是AspectJ类型模式。任何匹配类型的bean都实现了该UsageTracked接口。请注意,在前面示例的before advice中,服务bean可以直接用作UsageTracked接口的实现。如果以编程方式访问bean,您将编写以下内容:

4

默认情况下,应用程序上下文中的每个方面都有一个实例。AspectJ将其称为单例实例化模型。可以使用备用生命周期定义方面。Spring支持AspectJ的perthis和pertarget 实例化模型(percflow, percflowbelow,和pertypewithin目前不支持)。您可以perthis通过perthis在@Aspect 注释中指定子句来声明方面。请考虑以下示例:

5

因为我们想要重试操作,所以我们需要使用around建议,以便我们可以proceed多次调用。以下清单显示了基本方面的实现:

6

相应的Spring配置如下:

7

为了优化方面以便它只重试幂等操作,我们可以定义以下 Idempotent注释:

8

然后,我们可以使用注释来注释服务操作的实现。对方面进行更改以仅重试幂等操作涉及改进切入点表达式,以便只有@Idempotent操作匹配,如下所示:

推荐信息