我们在使用SpringBoot为一些静态属性或者静态对象注入时会发现注入不成功。
我们可以以下这几种方式把需要注入的值注入到静态属性中。
代码如下(示例):@Value与@Autowired都可以使用
@SpringBootTest(classes = Application.class)
public class TestApplication {
private static DaoUtil daoUtil;
private static String ACTIVE;
// 这里其实我们只需要一个setter方法
// 即可把springboot中的配置文件中的属性注入到静态属性中
@Value("${spring.profiles.active}")
public void setACTIVE( String ACTIVE) {
TestApplication.ACTIVE = ACTIVE;
}
@Autowired
public void setDaoUtil(DaoUtil daoUtil) {
TestApplication.daoUtil = daoUtil;
}
@Test
void contextLoads() {
System.out.println(getActive());
System.out.println(daoUtil);
}
public static String getActive(){
return ACTIVE;
}
}
@Autowired
DaoUtil daoUtilProxy;
@Value("${spring.profiles.active}")
String activeProxy;
private static DaoUtil daoUtil;
private static String ACTIVE;
@PostConstruct
private void init() {
daoUtil = daoUtilProxy;
ACTIVE = activeProxy;
}
// 用ide工具生成静态对象setter方法时会自动的把static的修饰词带上
// 这样也会让注入不成功(作者的惨痛经历)
// 这里我们需要把static去掉即可
public static void setACTIVE(String ACTIVE) {
TestApplication.ACTIVE = ACTIVE;
}
我们需要可以在组件类中使用@Value或@Autowired注入静态属性,才能注入成功。否则不成效;