宣告切面
啟用 @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` 註解將其標記為切面,因此將其排除在自動代理之外。 |