java - Spring - 将依赖项注入(inject) ServletContextListener

标签 java spring tomcat servlets dependency-injection

我想将一个依赖注入(inject)到 ServletContextListener 中。但是,我的方法不起作用。我可以看到 Spring 正在调用我的 setter 方法,但是稍后在调用 contextInitialized 时,该属性为 null

这是我的设置:

ServletContextListener:

public class MyListener implements ServletContextListener{

    private String prop;

    /* (non-Javadoc)
     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        System.out.println("Initialising listener...");
        System.out.println(prop);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
    }

    public void setProp(String val) {
        System.out.println("set prop to " + prop);
        prop = val;
    }
}

web.xml:(这是文件中的最后一个监听器)

<listener>
  <listener-class>MyListener</listener-class>
</listener> 

applicationContext.xml:

<bean id="listener" class="MyListener">
  <property name="prop" value="HELLO" />
</bean>  

输出:

set prop to HELLO
Initialising listener...
null

实现这一目标的正确方法是什么?

最佳答案

dogbane 的答案(已接受)有效,但由于实例化 bean 的方式,它使测试变得困难。我更喜欢 question 中建议的方法:

@Autowired private Properties props;

@Override
public void contextInitialized(ServletContextEvent sce) {
    WebApplicationContextUtils
        .getRequiredWebApplicationContext(sce.getServletContext())
        .getAutowireCapableBeanFactory()
        .autowireBean(this);

    //Do something with props
    ...
}    

关于java - Spring - 将依赖项注入(inject) ServletContextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746041/

相关文章:

java - 将图像大小调整为从 Swing 应用程序中的文件选择器动态获取的 JLabel 的大小

java - 树打印额外字符

java - 从 View 中访问 Spring MVC BindingResult

java - 在方法名称中发现无效字符。 HTTP 方法必须是 token

java - Docker+Log4j最佳实践

java - 如何创建我的 java 项目的可执行文件(构建、测试和运行)?

sql - 错误生成 Hibernate Jpa 存储库查询

java - Spring session bean管理

java - Tomcat 不连接到数据库,但是当我从 netbeans 中运行它时,它工作得很好

java - 使用 tomcat 在 ubuntu 10.10 中运行 Servlet