слушатель зависимости - PullRequest
       0

слушатель зависимости

14 голосов
/ 01 апреля 2011

В моем приложении Stripes я определяю следующий класс:

MyServletListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

  private SomeService someService;

  private AnotherService anotherService;

  // remaining implementation omitted
} 

Сервисный уровень этого приложения использует Spring для определения и связывания некоторых сервисных компонентов в XML-файле. Я хотел бы добавить бины, которые реализуют SomeService и AnotherService в MyServletListener, это возможно?

Ответы [ 2 ]

24 голосов
/ 01 апреля 2011

Примерно так должно работать:

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);
    }

    ...
}

Ваш слушатель должен быть объявлен после ContextLoaderListener Spring web.xml.

12 голосов
/ 30 октября 2013

Немного короче и проще использовать класс 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);
    }

    ...
}
...