2011-03-08 3 views
1
<bean id="userFacade" class="com.test.facade.UserFacadeImpl"> 
      <property name="userDao" ref="userDao"/> 
      <property name="currentUser" ref="user"/> 
</bean> 
<bean id="user" class="com.test.beans.User" scope="session"> 
    <aop:scoped-proxy/> 
</bean> 

UserDao와 사용자가 전달됩니다. 사용자는 범위이며 싱글 톤을 나타냅니다. 따라서 userfacade에 대한 모든 요청은 동일한 객체를 반환하지만 각 세션마다 사용자가 다를 것입니다. 싱글 톤 내부의 개념 세션이 혼란 스럽습니다. 누군가 설명 할 수 있습니까?싱글 톤과 스코프

답변

1

UserFacadeImpl에 삽입 된 User의 인스턴스는 메서드 호출을 User의 실제 세션 범위 인스턴스에 위임하는 프록시입니다.

은 참조 :

+0

오 !! ok 가하는 일. 몇 가지 예를 언급하고 있는데 UserFacadeImpl이 @Service로 표기된 것을 보았습니다. 이것이 의미하는 바는 무엇이며 어떻게 @Resource와 다른 점입니까? –

+0

@ 제리 : http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-annotation-config 참조 – axtavt

2

은 "범위 프록시가"당신의 User 콩 주위에 투명한 래퍼입니다. 해당 프록시의 메소드가 호출되면, 이는 스프링의 스레드 로컬 메커니즘 (RequestContextHolder)을 사용하여 현재 HttpSession을 찾은 다음 세션의 속성 내부에서 User 오브젝트를 가져옵니다. 해당 세션에 세션이 없으면 새 세션이 만들어져 세션에 저장됩니다. 그런 다음 User의 "실제"메소드가 호출됩니다.

범위가 확장 된 프록시가있는 큰주의 사항은 범위가 "활성"인 경우에만 프록시의 메소드를 호출 할 수 있다는 것입니다. 현재 실행중인 스레드가 서블릿 요청 인 경우