使ServletContextListener弹簧感知


问题内容

我将Spring插入现有的Java EE Web应用程序。我的web.xml中有以下几行:

<listener>
    <listener-class>com.MyContextListener</listener-class>
</listener>

MyContextListener下课?

public class MyContextListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent event) {
       //...
    }
}

我应该怎么做才能MyContextListener由Spring管理?


编辑:

我的假设是:Spring应该创建所有servlet和所有Web应用程序基础结构,因此contextInitialized方法中发生的所有事情都MyContextListener应该由Spring处理。通过实现我认为的某些接口,我该如何实现。如果我错了,请纠正我。谢谢!


问题答案:

好,

我们有一个类似的方案,将现有的 Jersey Web服务应用程序配置为使用 Spring 进行依赖项注入。我们的 Jersey网络
应用扩展了 ContextLoaderListener ,如下所示

public class XServletContextListener extends ContextLoaderListener {
    ... 
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        super.contextInitialized(arg0);
        ....
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        super.contextDestroyed(arg0);
        ....
    }
}

其中 ContextLoaderListener的

import org.springframework.web.context.ContextLoaderListener;

我们包括了 jersey-spring 桥以及所有 spring 依赖项,包括 applicationContext.xml
,如下所示

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <context:component-scan base-package="com.xxx.*" />
    ....
    ....
</beans>

显然需要确保 XServletContextListener 包含在 web.xml中 ,如下所示

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>com.xxx.**.XServletContextListener</listener-class>
</listener>

其次是 servlet 及其 init-param 值和 servlet 映射。您显然可以采用注释配置代替xml
confib,在这种情况下,您将需要使用 WebListener 注释。

我们使用各种注释,例如

@Component for objects
@Service for services 
@Repository for DAOs
@Controller for controllers/resources 
@ContextConfiguration for tests

一切都由Spring框架加载和 自动接线