問題
在編寫JavaMail工具類的時候,如圖所示:直接使用 @Autowired 靜態注入JavaMailSender。
@Autowired
private static JavaMailSender mailSender;
@Value("${spring.mail.username}")
private static String from;
然後報空指針異常,那麼我們怎麼解決呢?我們使用 @PostContruct 註解來解決這個問題
解決
@PostContruct是 JavaX 的註解,在這裏可以理解爲在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() 方法。
驗證
最後,我們來看一下效果如何
可以看到,成功發送了驗證碼並且沒有報錯