问题 :
- 静态方法里边引用了非静态变量b,会直接报错
- 静态方法中引用的b虽然用了
@Autowired
注解,但是该注解的注入是在静态方法加载之后执行的,所以此处的b在使用时为null - 当一个类包含了
@Autowired
的子类时,他就必须交给spring来处理而不能使用new来初始化,否则会导致他的自动装配的子类为null。所以如果使用注解的方式,那么我们这个MyUtil 类就需要加上@Component
注解来交给Spring进行初始化。
解决方法 :
- 使用PostConstruct注解
- PostConstruct标注方法执行时机
- 完成依赖注入以执行任何初始化之后,在类投入服务之前调用,即:在spring项目中,在一个bean的初始化过程中,方法执行先后顺序为
Constructor
>@Autowired
>@PostConstruct
正确代码 :
@Component
public class MyUtil {
private static MyUtil myUtil;
@Autowired
private B b;
@PostConstruct
public void init(){
myUtil = this;
myUtil.b = this.b;
}
public static void testB(String test) {
myUtil.b.methodB();
}
}
参考文献:https://blog.csdn.net/Jarbein/article/details/117857580
标签:PostConstruct,静态方法,Autowired,Spring,myUtil,初始化,注解,注入 From: https://www.cnblogs.com/seawavelin/p/16708258.html