开发者

How to do something on session start in Spring MVC?

开发者 https://www.devze.com 2023-01-08 02:16 出处:网络
I need to initialize every new http session with some values. How do I do that? I tried to create a session-scoped component and initializing session in 开发者_StackOverflow社区@PostConstruct, but s

I need to initialize every new http session with some values. How do I do that?

I tried to create a session-scoped component and initializing session in 开发者_StackOverflow社区@PostConstruct, but session-scoped beans are not eagerly created until I request access them.


If you are absolutely certain that your want eager initialization, you can do the following:

  • define an interceptor for all beans
  • defina a <lookup-method> for that interceptor:

    <lookup-method name="getCurrentSessionBean"
         bean="yourSessionBeanToInitialize"/>
    
  • define the interceptor abstract, with an abstract method getCurrentSessionBean()

  • create a flag initialized on the bean
  • on each interception, call the lookup method and it will return an instance of the bean from the current session. If it is not initialized (the flag), initialize it
  • you can also use @PostConstruct and spare the initizlied flag

Another option is to:

  • define a HttpSessionListener in web.xml (or with annotations if using servlet 3.0)
  • use WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext) to obtain the context
  • call getBean(..) to get an instance of the session-scoped bean
  • it will be initialized with @PostConstruct at that point

The first option is "more spring", the second is easier and faster to implement.

0

精彩评论

暂无评论...
验证码 换一张
取 消