# 5.4.6 Aspect 초기화 모델 by ks

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

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

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

```java
@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 인스턴스가 매치된 조인 포인트에 생성**한다.
