@Autowired注解和静态方法

某些业务场景需要我们将方法定义成静态方法,该静态方法还依赖别的被容器管理的类

@Service
public class Foo {

    public int doStuff() {

        System.out.println("hehe");
        return 1;
    }
}

@Component
public class Boo {

    @Autowired
    private static Foo foo;

    public static void test() {
        foo.doStuff();
    }
}

这样必然报java.lang.NullPointerException: null异常,解决办法:

1.将@Autowire加到构造方法上

@Component
public class Boo {
    private static Foo foo;

    @Autowired
    public Boo(Foo foo) {
        Boo.foo = foo;
    }
}

2.用@PostConstruct注解

@Component
public class Boo {

    private static Foo foo;

    @Autowired
    private Foo foo2;

    @PostConstruct
    public void beforeInit() {
        foo = foo2;
    }

    public static void test() {
        foo.doStuff();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、业务场景 spring框架应用中有些静态方法需要依赖被容器管理的类,就像这样: 这样一定会报java.lang...
    wangzaiplus阅读 1,606评论 0 4
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,289评论 9 118
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • 画画可以让人很快平静下来,原本心情不好,后来慢慢就忘了,画的有些潦草。
    兔子xiansen阅读 408评论 0 6
  • 行动第一,完美第二。 不会,学。 从哪学,书。 不懂,看。 还不懂,天天看。
    木方方阅读 438评论 0 0