복붙노트

[SPRING] 종속성 삽입 서블릿 수신기

SPRING

종속성 삽입 서블릿 수신기

내 Stripes 앱에서 다음 클래스를 정의합니다.

MyServletListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

  private SomeService someService;

  private AnotherService anotherService;

  // remaining implementation omitted
} 

이 애플리케이션의 서비스 레이어는 Spring을 사용하여 XML 파일에서 일부 서비스 빈을 정의하고 연결합니다. SomeService 및 AnotherService를 구현하는 빈을 MyServletListener에 삽입하고 싶습니다. 이것이 가능합니까?

해결법

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

    1.이 같은 것이 작동해야합니다 :

    이 같은 것이 작동해야합니다 :

    public class MyServletListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener {
        @Autowired
        private SomeService someService;        
        @Autowired
        private AnotherService anotherService; 
    
        public void contextInitialized(ServletContextEvent sce) {
            WebApplicationContextUtils
                .getRequiredWebApplicationContext(sce.getServletContext())
                .getAutowireCapableBeanFactory()
                .autowireBean(this);
        }
    
        ...
    }
    

    리스너는 web.xml의 Spring의 ContextLoaderListener 다음에 선언되어야합니다.

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

    2.좀 더 짧고 더 간단하게 SpringBeanAutowiringSupport 클래스를 사용하는 것입니다. 당신이해야 할 일은 이것입니다.

    좀 더 짧고 더 간단하게 SpringBeanAutowiringSupport 클래스를 사용하는 것입니다. 당신이해야 할 일은 이것입니다.

    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    

    그래서 axtavt의 예제를 사용하면 :

    public class MyServletListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener {
        @Autowired
        private SomeService someService;        
        @Autowired
        private AnotherService anotherService; 
    
        public void contextInitialized(ServletContextEvent sce) {
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        }
    
        ...
    }
    
  3. from https://stackoverflow.com/questions/5511152/dependency-inject-servlet-listener by cc-by-sa and MIT license