2015-04-22 75 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

相关问题