Java靜態代碼獲取不到@value註入的值
阿新 • • 發佈:2019-04-12
get app prope div ext default 獲取 def over
靜態代碼執行的時候,spring是沒有註入的,這個時候:
//錯誤的使用方法 @Value("${name}") private static String name; public static void test() { String s = name; System.out.println(s); }
解決辦法:
@Component public class Properties { @Value("${name}") private String name;
public getName(){return name;
}
}
@Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringContextUtil.applicationContext == null){ SpringContextUtil.applicationContext = applicationContext; } } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name){ return getApplicationContext().getBean(name); } public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); }
public static void test() { Properties properties = SpringContextUtil.getBean(Properties.class); String s = properties.getName(); System.out.println(s);//成功打印name值 }
使用springboot的同學,需要動態獲取生產、測試、開發環境的,可以在pom文件裏定義
<profile> <id>test</id> <properties> <profileActive>test</profileActive> </properties> <activation> <activeByDefault>true</activeByDefault><!--默認配置--> </activation> </profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
在application.yml裏配置,系統根據pom定義的profileActive(test)會找相應的application-test.yml文件
spring: profiles: active: @[email protected]
Java靜態代碼獲取不到@value註入的值