在静态方法中调用@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();

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容