依赖注入 servlet 侦听器

2022-09-03 17:18:56

在我的 Stripes 应用程序中,我定义了以下类:

MyServletListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

  private SomeService someService;

  private AnotherService anotherService;

  // remaining implementation omitted
} 

此应用程序的服务层使用 Spring 在 XML 文件中定义和连接一些服务 Bean。我想将实现和实现的豆子注入,这可能吗?SomeServiceAnotherServiceMyServletListener


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

    ...
}

您的听众应该在 Spring's in 之后声明。ContextLoaderListenerweb.xml


答案 2

使用类会更短、更简单一点。
你所要做的就是: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);
    }

    ...
}

推荐