2012-12-15 3 views
2

PostConstruct로 주석 된 메소드 내의 인스턴스 필드 초기화가 스레드 안전으로 간주되는지 여부를 아는 사람이 있습니까? 내 ApplicationScoped bean의 필드를 휘발성으로 만들지 않으면 다른 스레드가 실제로 값을 볼 수 있는지 잘 모르겠습니다 ...CDI postconstruct 초기화 필드

어떤 힌트 또는 답변 주셔서 감사합니다!

답변

1

나는 이것을 절대적으로 보장하는 사양에 대한 직접적인 언급이 없지만 @PostConstruct은 스레드로부터 안전해야합니다.

CDI 런타임은 bean 작성에 전적으로 책임을지고 주어진 범위에 대해 하나의 인스턴스 만 작성합니다. @PostConstruct은 빈이 이러한 범위 또는 주입을 통해 액세스 가능하게되기 전에 실행됩니다.

+0

JMM의 관점에서 볼 때 메모리 장벽이 없다면 내가 그 (것)들을 휘발성으로 만들어야 할 것이라고 생각하기 때문에, 확실히 말해 줄 수 있다면 더 좋을 것이다. –

+0

CDI가 Bean을 초기화하기 전에는 다른 스레드가 인스턴스에 대한 참조를 얻지 못할 수도 있습니다. Bean에 대한 동시 요청의 경우, 모든 스레드가 가상의'beanManager.getBean (...)'호출에 걸렸을 것입니다. –

+0

고마워요, 물론 그것이 의미있는 유일한 행동이지만, 스펙을 읽지 않아도 확실히 알고 싶었습니다. ;) –