静态代码执行的时候,spring是没有注入的,这个时候:
//错误的方法:
@Value("${sap.name}")
private static String name;
public static void test() {
String name = name;
System.out.println(name);
}
解决办法:
方法一:
@Component
public class SapConfig {
public static String uname;
@Value("${sap.uname}")
public void setUname(String uname) {
uname = uname;
}
}
2.
@Component
public class SapConfig {
@Value("${sap.name}")
private static String name;
public Stirng setName(String name) {
name = name;
}
public String 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() {
SapConfig sapConfig = SpringContextUtil.getBean(SapConfig .class);
String name = sapConfig.getName();
System.out.println(name);
}