5.4.2 Aspect 선언하기 by ys

@AspectJ 지원이 활성화되면 @AspectJ 애스펙트 ( @Aspect주석 이있는 클래스)로 애플리케이션 컨텍스트에 정의 된 모든 Bean 이 Spring에 의해 자동으로 감지되고 Spring AOP를 구성하는 데 사용됩니다. 다음 두 예제는 매우 유용하지 않은 측면에 필요한 최소 정의를 보여줍니다.

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

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

두 예제 중 두 번째 예제 NotVeryUsefulAspect는 주석으로 org.aspectj.lang.annotation.Aspect주석 이 달린 클래스 정의를 보여줍니다 .

package org.xyz;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class NotVeryUsefulAspect {

}

Aspects (어노테이션 된 클래스 @Aspect)는 다른 클래스와 같은 메소드 및 필드를 가질 수 있습니다. 또한 pointcut, advice 및 introduction (inter-type) 선언을 포함 할 수 있습니다.

구성 요소 스캐닝을 통한 aspects 자동 감지

Aspect 클래스를 Spring XML 설정에서 일반 Bean으로 등록하거나 클래스 경로 스캐닝을 통해 자동 감지 할 수있다. 다른 Spring 관리 빈과 동일하다. 그러나 @Aspect주석은 클래스 경로의 자동 감지에 충분하지 않습니다. 이를 위해 별도의@Componentannotation 을 추가해야합니다 (또는 Spring의 구성 요소 스캐너 규칙에 따라 한정된 사용자 정의 스테레오 타입 annotation 을 추가해야 합니다).

다른 측면의 측면에 대한 자문을 제공합니까?

Spring AOP에서, aspect 자체는 다른 측면의 advoce 대상이 될 수 없다. @Aspect클래스 의 어노테이션은 이것을 aspect로 표시하고 자동 프록시에서 제외시킨다.

Last updated

Was this helpful?