宣告切面

啟用 @AspectJ 支援後,Spring 會自動檢測應用上下文中定義的所有類帶有 @AspectJ 切面標記(即帶有 `@Aspect` 註解)的 Bean,並用於配置 Spring AOP。接下來的兩個示例展示了一個不太有用的切面所需的最低限度步驟。

第一個示例展示了應用上下文中的一個常規 Bean 定義,它指向一個帶有 `@Aspect` 註解的 Bean 類。

  • Java

  • Kotlin

  • Xml

public class ApplicationConfiguration {

	@Bean
	public NotVeryUsefulAspect myAspect() {
		NotVeryUsefulAspect myAspect = new NotVeryUsefulAspect();
		// Configure properties of the aspect here
		return myAspect;
	}
}
class ApplicationConfiguration {

	@Bean
	fun myAspect() = NotVeryUsefulAspect().apply {
		// Configure properties of the aspect here
	}
}
<bean id="myAspect" class="org.springframework.docs.core.aop.ataspectj.aopataspectj.NotVeryUsefulAspect">
	<!-- configure properties of the aspect here -->
</bean>

第二個示例展示了 NotVeryUsefulAspect 類的定義,它帶有 `@Aspect` 註解。

  • Java

  • Kotlin

@Aspect
public class NotVeryUsefulAspect {
}
@Aspect
class NotVeryUsefulAspect

切面(帶有 `@Aspect` 註解的類)可以擁有方法和欄位,就像其他任何類一樣。它們也可以包含切點、通知和引入(inter-type)宣告。

透過元件掃描自動檢測切面
您可以將切面類註冊為 Spring XML 配置中的常規 Bean,透過 `@Configuration` 類中的 `@Bean` 方法註冊,或者讓 Spring 透過類路徑掃描自動檢測它們 — 這與其他 Spring 管理的 Bean 相同。但是請注意,`@Aspect` 註解不足以在類路徑中進行自動檢測。為此,您需要新增一個單獨的 `@Component` 註解(或者,根據 Spring 元件掃描器的規則,新增一個符合條件的自定義 stereotype 註解)。
用其他切面通知切面?
在 Spring AOP 中,切面本身不能成為其他切面通知的目標。類上的 `@Aspect` 註解將其標記為切面,因此將其排除在自動代理之外。