2016-09-30 47 views
1

在Spring項目中,我使用了偵聽器類型ServletContextListener。我使用的實例字段是@Autowired,但我不能在contextInitialized(event)方法中使用自動佈線實例變量,它會拋出NullpointerException如何在ServletContextListener中使用@Autowired實例變量使用

如何使用@Autowired這個

+1

您必須手動電線它; Spring不會創建Java EE服務器所執行的偵聽器。你如何創建你的'ApplicationContext'?看看[this](http://stackoverflow.com/a/21914004/2071828)。 –

回答

0

井,泉保證它會在上下文初始化後進行初始化。

它的初始化後,您可以使用訪問:

MyClass myClass = ctx.getBean(MyClass.class); 

換句話說:你不能訂立合同,這將迫使春天來初始化應用程序上下文終於初始化Bean之前使用@Autowired

1

你不能。 @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); 
    } 

} 
+1

如果你有一個上下文,你可以調用'autowireBean(this)'... –

相關問題