2013-02-05 5 views
1

AspectJ에서 각 스레드마다 aspect를 선언 할 방법이 있는지 알고 싶습니다. 또한 스레드별로 aspect를 선언 할 방법이 있는지 알고 싶습니다. 내가이 예를 참조하고 스레드의 팀에 의해Aspect per Thread & Aspect/팀당 스레드

:

주어진 스레드는 'X는'다음 'X'는이 팀의 마스터가 주어진 스레드의 경우 'Y'이며, 'N'새 스레드를 생성 이 팀은 또한 새로운 팀을 창안하여 'Y'가이 새 팀의 마스터가됩니다. 그래서 팀 'Y'에 대한 측면 'A'의 스레드 'X'와 다른 '인스턴스'에 의해 팀 생산물에 'A'측면을 선언 할 수 있는지 알고 싶습니다.

+1

AspectJ에는이 기능이 없다고 생각하십시오. 그런데, Aspect의 ThreadLocal을 사용하여 스레드마다 상태를 만들 수 있습니다. – Taky

+0

@Taky 답장을 보내 주셔서 감사합니다. ThreadLocal을 사용하여 좋은 해결 방법을 제시합니다. 네, 적어도 aspectj는 아직이 능력이 없기 때문에 나는 아무것도 찾을 수 없었습니다. – dreamcrash

답변

1

AspectJ는 바이트 코드 만 조작합니다. 따라서 Aspects hook을 생성 할 때 런타임 정보 (코드가 호출되는 스레드는 런타임 정보)를 결정할 수 없습니다.

스레드 고유 상태를 생성해야하는 경우 ThreadLocal을 사용하십시오. ThreadGroup 고유 상태를 만들어야 할 경우 몇 가지 수동 작업을 수행해야합니다. 구현 방법을 확인하십시오 : ThreadGroup local variables. Java에서는 cannot determine parent thread을 인식하므로 ThreadGroup을 사용해야합니다.

그리고 ThreadLocal 상태와 Aspects를 사용하고 싶을 때마다 프로그램 디자인에 대해 생각해보십시오. 올바른 방법입니까?

+0

답변 해 주셔서 감사합니다. 매우 도움이됩니다. – dreamcrash