Declaring an Aspect

Dev.Hammy·2024년 3월 6일
0

@AspectJ 지원이 활성화되면 @AspectJ aspect(@Aspect 어노테이션 포함)인 클래스를 사용하여 애플리케이션 컨텍스트에 정의된 모든 Bean이 Spring에 의해 자동으로 감지되고 Spring AOP를 구성(configure)하는 데 사용됩니다. 다음 두 예는 별로 유용하지 않은 aspect에 필요한 최소한의 단계를 보여줍니다.

두 예제 중 첫 번째는 @Aspect로 어노테이션이 달린 Bean 클래스를 가리키는 애플리케이션 컨텍스트의 일반 Bean 정의를 보여줍니다.

<bean id="myAspect" class="com.xyz.NotVeryUsefulAspect">
	<!-- configure properties of the aspect here -->
</bean>

두 예제 중 두 번째는 @Aspect 어노테이션이 달린 NotVeryUsefulAspect 클래스 정의를 보여줍니다.

package com.xyz;

import org.aspectj.lang.annotation.Aspect;

@Aspect
public class NotVeryUsefulAspect {
}

Aspect(@Aspect로 어노테이션이 달린 클래스)는 다른 클래스와 마찬가지로 메서드와 필드를 가질 수 있습니다. 또한 포인트컷, 어드바이스 및 introduction(inter-type) 선언을 포함할 수도 있습니다.

[Note]
component scan을 통해 aspect 자동 감지

@Configuration 클래스의 @Bean 메서드를 통해 Spring XML 구성에서 일반 Bean으로 aspect 클래스를 등록하거나 다른 Spring 관리 Bean과 마찬가지로 classpath 검색을 통해 Spring이 이를 자동 감지하도록 할 수 있습니다. 그러나 @Aspect 어노테이션은 classpath의 자동 감지에 충분하지 않습니다. 이를 위해서는 별도의 @Component 어노테이션(또는 Spring 컴포넌트 스캐너의 규칙에 따라 자격(qualifies)을 갖춘 사용자 정의 스테레오타입 어노테이션)을 추가해야 합니다.

[Note]
다른 aspect와 함께 aspect를 advise합니까?
Spring AOP에서는 aspect 자체가 다른 aspect의 advise 대상이 될 수 없습니다. 클래스의 @Aspect 어노테이션은 이를 aspect으로 표시하므로 자동 프록시(auto-proxying)에서 제외됩니다.

0개의 댓글