在静态方法中调用@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; //注入对象

    private static MyControllermyController;

    @PostConstruct//利用PostConstruct注解初始化赋值

    public void init() {

myController =this;

        myController.myAutowired =this.myAutowired;

    }

public static void myStatic() {

//调用需要的方法

        myController.myAutowired.method();

    }

}

你可能感兴趣的:(在静态方法中调用@Autowired注解的类失败原因)