在Spring項目中,我使用了偵聽器類型ServletContextListener
。我使用的實例字段是@Autowired
,但我不能在contextInitialized(event)
方法中使用自動佈線實例變量,它會拋出NullpointerException
。如何在ServletContextListener中使用@Autowired實例變量使用
如何使用@Autowired
這個
在Spring項目中,我使用了偵聽器類型ServletContextListener
。我使用的實例字段是@Autowired
,但我不能在contextInitialized(event)
方法中使用自動佈線實例變量,它會拋出NullpointerException
。如何在ServletContextListener中使用@Autowired實例變量使用
如何使用@Autowired
這個
井,泉保證它會在上下文初始化後進行初始化。
它的初始化後,您可以使用訪問:
MyClass myClass = ctx.getBean(MyClass.class);
換句話說:你不能訂立合同,這將迫使春天來初始化應用程序上下文終於初始化Bean
之前使用@Autowired
。
你不能。 @Autowired
僅在上下文初始化後纔有效。
這樣你就可以做到這一點的黑客:
public class MyListener implements ServletContextListener {
private MyBean myBean;
@Override
public void contextInitialized(ServletContextEvent event) {
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
this.myBean = (MyBean)ctx.getBean("myBean");
}
}
或更好的解決辦法是THX至鮑里斯蜘蛛:
public class MyListener implements ServletContextListener {
@Autowired
private MyBean myBean;
@Override
public void contextInitialized(ServletContextEvent event) {
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
ctx.autowireBean(this);
}
}
如果你有一個上下文,你可以調用'autowireBean(this)'... –
您必須手動電線它; Spring不會創建Java EE服務器所執行的偵聽器。你如何創建你的'ApplicationContext'?看看[this](http://stackoverflow.com/a/21914004/2071828)。 –