Spring不能直接@autowired注入Static變量/ 關於SpringBoot的@Autowired 靜態變量注入


昨天在編寫JavaMail工具類的時候,靜態方法調用靜態變量,這是很正常的操作,當時也沒多想,直接靜態注入。

@Component
public class JavaMailUtil {

    @Autowired
    private static JavaMailSenderImpl mailSender;

    /**
     * 發送包含簡單文本的郵件
     */
    public static void sendText(String title,String text) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        // 設置收件人
        simpleMailMessage.setTo(new String[] {"3213452105@qq.com"});
        //寄件人
        simpleMailMessage.setFrom("857776215@qq.com");
        simpleMailMessage.setSubject(title);
        simpleMailMessage.setText(text);
        // 發送郵件
        mailSender.send(simpleMailMessage);
        System.out.println("JavaMailUtil類提示:---郵件已發送---");
    }
}

結果就出現了空指針異常。查詢了之后發現 @Autowired不能給靜態變量注入,所以出現空指針異常。然后開始找解決方法,暫時找到了一個能用的方法。

@Component
public class JavaMailUtil {

    private static JavaMailSenderImpl mailSender;

    @Autowired
    private JavaMailSenderImpl javaMailSender;
    @PostConstruct
    public void init(){
        mailSender = javaMailSender;
    }
    /**
     * 發送包含簡單文本的郵件
     */
    public static void sendText(String title,String text) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        // 設置收件人
        simpleMailMessage.setTo(new String[] {"3213452105@qq.com"});
        //寄件人
        simpleMailMessage.setFrom("857776215@qq.com");
        simpleMailMessage.setSubject(title);
        simpleMailMessage.setText(text);
        // 發送郵件
        mailSender.send(simpleMailMessage);
        System.out.println("JavaMailUtil類提示:---郵件已發送---");
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM