Loading...
Spring Framework Reference Documentation 7.0.2의 Aspect Instantiation Models의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이것은 고급 주제입니다. AOP를 이제 막 시작했다면, 나중까지는 안심하고 건너뛰어도 됩니다.
기본적으로 애플리케이션 컨텍스트 내에는 각 aspect의 인스턴스가 하나만 존재합니다.
AspectJ는 이것을 singleton instantiation model이라고 부릅니다. lifecycle이 다른
aspect를 정의하는 것도 가능합니다. Spring은 AspectJ의 perthis, pertarget,
pertypewithin instantiation model을 지원합니다.
percflow와 percflowbelow는
현재 지원되지 않습니다.
@Aspect 어노테이션에 perthis 절을 지정하여 perthis aspect를 선언할 수 있습니다.
다음 예제를 참고하십시오:
1@Aspect("perthis(execution(* com.xyz..service.*.*(..)))") 2public class MyAspect { 3 4 private int someState; 5 6 @Before("execution(* com.xyz..service.*.*(..))") 7 public void recordServiceUsage() { 8 // ... 9 } 10}
1@Aspect("perthis(execution(* com.xyz..service.*.*(..)))") 2class MyAspect { 3 4 private val someState: Int = 0 5 6 @Before("execution(* com.xyz..service.*.*(..))") 7 fun recordServiceUsage() { 8 // ... 9 } 10}
앞선 예제에서 perthis 절의 효과는 business service를 수행하는 각 고유한 service
객체(포인트컷 expression에 의해 매칭된 join point에서 this에 바인딩되는 각
고유한 객체)마다 하나의 aspect 인스턴스가 생성된다는 것입니다. aspect 인스턴스는
service 객체에서 메서드가 처음 호출될 때 생성됩니다. aspect는 service 객체가
scope를 벗어날 때 scope를 벗어납니다.
aspect 인스턴스가 생성되기 전에는 그 안의
어떠한 advice도 실행되지 않습니다. 일단 aspect 인스턴스가 생성되면, 그 안에 선언된
advice는 매칭된 join point에서 실행되지만, 이 aspect와 연관된 service 객체인
경우에만 실행됩니다. per 절에 대한 더 많은 정보는 AspectJ Programming Guide를
참조하십시오.
pertarget instantiation model은 perthis와 정확히 동일한 방식으로 동작하지만,
매칭된 join point에서 각 고유한 target 객체마다 하나의 aspect 인스턴스를
생성합니다.
Introductions
An AOP Example