5.4.6 Aspect 초기화 모델 by ks

이는 심화된 주제다. 만약 AOP를 일단 먼저 시작하고 싶으면 여긴 스킵하고 나중에 볼 것.

기본적으로 어플리케이션 컨텍스트 안에 각 aspect의 단일 인스턴스가 있다. AspectJ는 싱글톤 초기화 모델이라고 부른다. 대신하는 라이프 사이클로 aspect를 정의할 수 있다. 스프링은 AspectJ의 perthis와 pertarget 초기화 모델(percflow, percflowbelow, pertypewithin 은 현재 지원하지 않는다.)을 지원한다.

@Aspect 어노테이션에서 perthis 구문을 구체화하는 perthis aspect를 선언할 수 있다. 아래 예제에서 고려해보자.

@Aspect("perthis(com.xyz.myapp.SystemArchitecture.businessService())")
public class MyAspect {

    private int someState;

    @Before(com.xyz.myapp.SystemArchitecture.businessService())
    public void recordServiceUsage() {
        // ...
    }

}

예제에서 'perthis' 구문의 효과는 하나의 aspect 인스턴스가 각 유니크한 비즈니스 서비스를 실행하는 ( 각 유니크한 오브젝트는 'this'와 포인트컷 표현에 의해 매치된 조인 포인트에서 바운드된다.)서비스 오브젝트를 위해 생성되는 것이다. aspect 인스턴스는 메소드가 서비스 오브젝트에 주입되는 처음에 생성된다. aspect는 서비스오브젝트가 스코프에서 끝날때 끝난다. aspect 인스턴스가 생성되기 전에, 어드바이스는 그 무엇도 실행하지 않는다. 애스펙트 인스턴스가 생성 되 자마자 서비스 오브젝트가이 애스펙트가 연관되어있을 때만 일치하는 조인 포인트에서 실행된다. Aspect 프로그래밍 가이드는 per 구문에서 더 많은 정보를 보자.

pertarget 인스턴스화 모델은 정확하게 perthis와 같은 방식으로 동작하지만, 각 유니크한 타겟 오브젝트를 위한 하나의 aspect 인스턴스가 매치된 조인 포인트에 생성한다.

Last updated