2015-04-22 25 views
1

我的Web應用程序中有一個ServletContextListener。以下作品...我可以使用@Value批註在ServletContextListener中獲取系統屬性

public class AppServletContextListener 
       implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener { 

     public void contextInitialized(ServletContextEvent arg0) { 

      String repManInitScript = System.getProperty("REP_MAN_INIT_SCRIPT"); 
      System.err.println(repManInitScript); 
     } 
} 

但usign的@Value批註不....

public class AppServletContextListener 
       implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener { 

@Value("${REP_MAN_INIT_SCRIPT}") 
private String repManInitScript; 

     public void contextInitialized(ServletContextEvent arg0) { 

      repManInitScript = System.getProperty("REP_MAN_INIT_SCRIPT"); 
      System.err.println(repManInitScript); 
     } 
} 

有沒有辦法抓住使用@Value註釋系統屬性?

感謝

+0

不可以,因爲ServletContextListener是由服務器創建的,而不是由Spring創建的。 – NullPointerException

回答

1

當然可以,但你必須從這樣的系統屬性抓住它:

@Value("#{systemProperties['REP_MAN_INIT_SCRIPT']}") 
private String repManInitScript; 

我假設你已經在你的系統屬性,此屬性。

當然@Value註釋只適用於春豆。如果您嘗試直接在ServletContextListener中使用它,它將不起作用。

${REP_MAN_INIT_SCRIPT}不能正常工作,因爲如果您有任何問題,彈簧會在您配置的屬性中查找屬性。

所以,如果你想要這個在初始化工作,你可以在你的spring bean中實現InitializingBean並覆蓋afterPropertiesSet方法。然後,該值將可用。

+0

謝謝。非常好的答案。 – Richie

相關問題