gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:46:20 24 4
gpt4 key购买 nike

我想将一个依赖注入(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com