在静态⽅法中调⽤@Autowired注解的类失败原因
今天同事⼩王遇到了⼀个问题,他在⼀个静态⽅法中想去调⽤⼀个@Autowired注解修饰的类,出现的情况就是被调⽤的⼀个类⼀直报null,其实想⼀想这个问题的出现也是必然的。static⽅法不需要实例化,静态⽅法在JVM刚加载的时候就编译过了,在程序的运⾏过程中随时可以调⽤,不需要区实例化某个对象后再去调⽤,可以直接通多类名去调⽤,直到结束释放内存。在⼀开始的时候JVM就已经为static⽅法和⽅法中的变量分配内存了,注意,但在此时spring boot容器还没有将@Autowire的修饰的类注⼊到容器中,所以我们在static⽅法中定义的
@Autowired修饰的变量此时为null,后⾯去调⽤此⽅法的时候⼀直为空。
解决⽅法:
使⽤@PostConstruct,@PostConstruct注解是Java提供的⼀个注解,该注解⽤来修饰⼀个⾮静态的void ()⽅法。被该注解修饰的⽅法会在服务器加载Servlet的时候运⾏,并且只会被服务器执⾏⼀次。此⽅法在构造函数之后执⾏,init()⽅法之前执⾏。通常我们回事在Spring框架中使⽤到@PostConstruct注解,该注解的⽅法在整个Bean初始化执⾏顺序:Consturctor(构造⽅法)->@Autowired(依赖注⼊)-
>@PostConstruct(注解的⽅法)
使⽤实例:
@Controller
public class MyControllor {
@Autowired
private MyAutowiredmyAutowired; //注⼊对象
static修饰的变量private static MyControllermyController;
@PostConstruct//利⽤PostConstruct注解初始化赋值
public void init() {
myController =this;
}
public static void myStatic() {
//调⽤需要的⽅法
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论