2009-09-29 4 views
3

Jetspeed 포털과 Springframework 2.5.6을 사용하는 프로젝트가 있습니다. Jetspeed 레벨 서비스가 각각 고유해야합니다. 이것은 AOP와 scope = "session"을 사용하는 것이 가장 좋을 것입니다. 문제는 세션이 시작 되 자마자 실행되어야하는 빈들 뒤에있는 것입니다. Spring의 AOP는 lazy load design을 선택하고 bean에 대한 메소드가 호출 될 때까지 실제 구현을 생성하거나 초기화하지 않는 것으로 보인다.Springframework 2.5.6에서 scope = "session"이 가능합니까? 세션 생성시 객체 생성

Session 객체가 생성 되 자마자 Spring AOP가 새로운 빈을 생성하도록 강제하는 방법이 있습니까?

답변

2

훌륭한 질문입니다. 마음에 드는 가장 쉬운 옵션 (표현을 용인한다면) 세션의 첫 번째 요청이 들어올 때 호출되는 컨트롤러에 세션 범위의 bean을 연결하는 것입니다. (이렇게하려면 컨트롤러가 세션 범위 bean 자체이거나 bean이 aop:scoped-proxy을 사용해야 함).

세션이 시작될 때 다른 컨트롤러가 호출 될 수 있다면 대신 세션 범위 인터셉터에 해당 빈을 연결하고 인터셉터를 통해 요청을 전달하도록 URL 매핑을 구성하여 빈이 초기화되도록 할 수 있습니다 세션 시작시에.

나는 이것을 더 우아한 방법으로 생각할 수 없다. sessionCreated()이 호출 될 때 앱 컨텍스트에서 getBean("my-session-scoped-bean")을 호출하는 사용자 정의 HttpSessionListener을 잠재적으로 만들 수 있지만 다소 괴롭습니다.