SpringBoot注入静态属性或静态对象的方法
作者:假女吖☌
我们在使用SpringBoot为一些静态属性或者静态对象注入时会发现注入不成功,我们可以以下这几种方式把需要注入的值注入到静态属性中,感兴趣的朋友一起看下
SpringBoot注入静态属性或静态对象
前言
我们在使用SpringBoot为一些静态属性或者静态对象注入时会发现注入不成功。
我们可以以下这几种方式把需要注入的值注入到静态属性中。
setter方式注入
代码如下(示例):@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;
}
}@PostConstruct init方式注入
@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;
}注意
两种方式都能成功注入对象或属性。 注入成功的前提是属性或对象所在的类是SpringBoot容器的组件(Bean)。
// 用ide工具生成静态对象setter方法时会自动的把static的修饰词带上
// 这样也会让注入不成功(作者的惨痛经历😭😭😭)
// 这里我们需要把static去掉即可
public static void setACTIVE(String ACTIVE) {
TestApplication.ACTIVE = ACTIVE;
}总结
我们需要可以在组件类中使用@Value或@Autowired注入静态属性,才能注入成功。否则不成效;
到此这篇关于SpringBoot注入静态属性或静态对象的文章就介绍到这了,更多相关SpringBoot注入静态属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
