복붙노트

[SPRING] Spring을 사용하여 HttpSessionListener에 의존성을 주입하는 방법은 무엇입니까?

SPRING

Spring을 사용하여 HttpSessionListener에 의존성을 주입하는 방법은 무엇입니까?

context.getBean ( "foo-bar")처럼 Spring을 사용하고 호출없이 HttpSessionListener에 종속성을 주입하는 방법?

해결법

  1. ==============================

    1.Servlet 3.0 ServletContext에는 "addListener"메소드가 있기 때문에 web.xml 파일에 리스너를 추가하는 대신 다음과 같이 코드를 추가 할 수 있습니다.

    Servlet 3.0 ServletContext에는 "addListener"메소드가 있기 때문에 web.xml 파일에 리스너를 추가하는 대신 다음과 같이 코드를 추가 할 수 있습니다.

    @Component
    public class MyHttpSessionListener implements javax.servlet.http.HttpSessionListener, ApplicationContextAware {
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if (applicationContext instanceof WebApplicationContext) {
                ((WebApplicationContext) applicationContext).getServletContext().addListener(this);
            } else {
                //Either throw an exception or fail gracefully, up to you
                throw new RuntimeException("Must be inside a web application context");
            }
        }           
    }
    

    즉, "MyHttpSessionListener"에 정상적으로 삽입 할 수 있다는 것을 의미합니다.이 경우 응용 프로그램 컨텍스트에서 Bean이 존재하면 리스너가 컨테이너에 등록됩니다

  2. ==============================

    2.Spring 컨텍스트에서 HttpSessionListener를 bean으로 선언하고 web.xml에 위임 프록시를 실제 리스너로 등록 할 수 있습니다.

    Spring 컨텍스트에서 HttpSessionListener를 bean으로 선언하고 web.xml에 위임 프록시를 실제 리스너로 등록 할 수 있습니다.

    public class DelegationListener implements HttpSessionListener {
        public void sessionCreated(HttpSessionEvent se) {
            ApplicationContext context = 
                WebApplicationContextUtils.getWebApplicationContext(
                    se.getSession().getServletContext()
                );
    
            HttpSessionListener target = 
                context.getBean("myListener", HttpSessionListener.class);
            target.sessionCreated(se);
        }
    
        ...
    }
    
  3. ==============================

    3.Spring 4.0에서는 3과 함께 작동하지만, 아래에 설명 된 예제를 구현하여 ApplicationListener 를 청취하고 HttpSession을 주입합니다. https://stackoverflow.com/a/19795352/2213375

    Spring 4.0에서는 3과 함께 작동하지만, 아래에 설명 된 예제를 구현하여 ApplicationListener 를 청취하고 HttpSession을 주입합니다. https://stackoverflow.com/a/19795352/2213375

  4. from https://stackoverflow.com/questions/2433321/how-to-inject-dependencies-into-httpsessionlistener-using-spring by cc-by-sa and MIT license