我可以使用@Value批注在ServletContextListener中获取系统属性吗

Ric*_*hie 3 spring spring-mvc

我的Web应用程序中有一个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 ); 
       }
}
Run Code Online (Sandbox Code Playgroud)

但是使用@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 ); 
      }
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使用@Value注释来获取系统属性?

谢谢

Pau*_*nis 5

是的,您可以,但是您必须从系统属性中获取它,如下所示:

@Value("#{systemProperties['REP_MAN_INIT_SCRIPT']}")
private String repManInitScript;
Run Code Online (Sandbox Code Playgroud)

我假设您的系统属性中已经具有此属性。

当然,@Value注释仅适用于spring bean。如果您尝试直接在ServletContextListener其中使用它将不起作用。

${REP_MAN_INIT_SCRIPT}是行不通的,因为如果有必要,spring会在配置的属性中寻找该属性。

因此,如果您希望在初始化时进行此操作,则可以在spring bean中实现InitializingBean并重写afterPropertiesSet方法。然后该值将可用。