2014-04-04 4 views
4

내 코드가 스레드로부터 안전한지 확실하지 않지만 누구든지 도움을받을 수 있습니까?Spring에서 세션 가져 오기 AOP

@Aspect 
public class MyAspect { 

    @Autowired 
    private HttpSession session; 


    @Before("...") 
    private void myMethod() { 
     seesion.getId(); 
    } 

} 

MyAspect의 범위는 기본 (싱글), 내 코드에서 얻을 세션 같은 시간과 많은 session.OK,에서 많은 요청 exsits이기 때문에? 그것은 스레드 안전입니까? 아니면 경우, 잘못된 코드입니다 그것이 잘못되었습니다. 어떻게해야합니까?

감사합니다.

답변

5

맞아. 괜찮아.

  1. 귀하의 MyAspect은 어쨌든 빈으로 등록되어야합니다.

  2. 그것은 AOP Aspect이든 상관 없습니다 : 의존성 주입 인프라는 동일합니다.

  3. HttpSession입니다. 이 오브젝트는 bean으로 등록되지 않았지만, 스프링은 트릭을 제공합니다 (WebApplicationContextUtils.SessionObjectFactory). 이 객체는 등록

    beanFactory.registerResolvableDependency(HttpSession.class, new SessionObjectFactory());

    그리고 주입 작동 때 ThreadLocal<RequestAttributes> 변수에서 필요에 따라 실제 메소드를 호출 ProxySessionObjectFactory

있다. 즉, 현재 스레드가 서블릿 스레드 인 경우 MyAspect.myMethod의 각 호출에서 콘크리트 HttpSession의 내용을 처리합니다.

질문에 대한 대답 : 예, 스레드 안전입니다.

+0

감사합니다. Artem! 좋은 답변입니다! – yybcjq