SpringBoot注入静态属性或静态对象
在调用静态方法的时候如何使用Spring自动注入的对象特别注意当前类必须是Spring的组件(否则静态资方法中拿到的还是)!!!!!!@AutowiredInfoplusApi apiProxy;private static InfoplusApi api;@PostConstructprivatevoid init() {api = apiProxy;}...
·
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注入静态属性,才能注入成功。否则不成效;
更多推荐
已为社区贡献1条内容
所有评论(0)