2016-07-07 5 views
1

지식 문제 = 코드 없음, 오류 없음,보고 할 예제가 없습니다.은 스레드로부터 안전하게 AspectJ를 실행할 수 있습니까?

method()ClassA 인 joinpoint를 적용했으며 ClassA은 싱글 톤이 아닙니다. 나는이 joinpoint를 처리하는 MyAspect을 생성한다.

질문 : ClassA.method()의 발신자가 2 명 있고 발신자가 2 개의 다른 스레드 (예 : 웹 요청)에서 작업하는 경우 AspectJ는 2 개의 다른 스레드 또는 단일 스레드에서 MyAspect을 실행합니까?

AspectJ는 직물의 동일한 스레드 (이 경우 ClassA)에서 MyAspect을 실행한다고 생각합니다.

답변

2

AspectJ는 현재 스레드에서 aspect를 실행할 것이다. 즉, 멀티 스레드 실행을 사용하는 경우 여러 스레드에서 aspect가 실행됩니다. 애스펙트가 공유 상태에서 작동하는 경우 안전하게 공유 상태에 액세스해야합니다.

싱글 톤 외에 다른 인스턴스화 모델이 있습니다. 싱글 톤 애스펙트를 사용하면 애스펙트의 인스턴스 하나만 앱에 생성됩니다. 당신은 당신의 측면이 인스턴스화하는 방법을 변경하는 perthis(), pertarget(), percflow() 또는 percflowbelow() 수정을 사용할 수 있으며, AspectJ의는 당 객체또는 당 제어 흐름으로 에 측면의 새로운 인스턴스를 생성합니다. 이러한 인스턴스화 모델을 사용하여 aspect 상태를 격리 할 수는 있지만, 공유 상태를 사용하는 경우, 기본 규칙은 계속 적용됩니다. 공유 상태에 대한 스레드 안전 액세스에주의해야합니다.

+0

답변과 제안에 감사드립니다. –