SpringBoot使用@Autowired注入靜態變量報空指針異常

問題


在編寫JavaMail工具類的時候,如圖所示:直接使用 @Autowired 靜態注入JavaMailSender

    @Autowired
    private static JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private static String from;

在這裏插入圖片描述

然後報空指針異常,那麼我們怎麼解決呢?我們使用 @PostContruct 註解來解決這個問題

解決


@PostContructJavaX 的註解,在這裏可以理解爲在Spring實例化該Bean之後馬上執行此方法,我們就用它來給靜態變量注入。如下所示,我們把代碼做一下修改:

    private static JavaMailSender mailSender;

    private static String from;

    @Resource
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String fromAddress;

    @PostConstruct
    public void init(){
        mailSender = javaMailSender;
        from = fromAddress;
    }

首先要注意的一點是,在Spring2.2以後推薦用 @Resource 來注入,如圖所示。
在這裏插入圖片描述

我們先定義兩個靜態變量,再定義兩個非靜態的變量與之對應。然後,用 init() 方法給這兩個靜態變量賦值,使用 @PostContruct 來註解 init() 方法。

驗證


最後,我們來看一下效果如何

在這裏插入圖片描述
在這裏插入圖片描述

可以看到,成功發送了驗證碼並且沒有報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章