注:用static去定義一個注入的方法或者配置文件值變量,編譯時不會有任何異常,運行時會報空指針。html
Spring官方不推薦此種方法。java
原理:spring
http://www.javashuo.com/article/p-yxfxezxp-et.htmlapp
利用spring的set注入方法,經過非靜態的setter方法注入靜態變量 ,咱們能夠改爲這樣就靜態變量能夠獲取到你配置的信息了。this
把get,set方法的static 修飾符去掉,而後在set方法上面加@Autowired便可阿里雲
/** 阿里雲OSS配置查詢 */ private static OSSConfMapper ossConfMapper; /** 阿里雲OSS圖片上傳 */ private static UploadImgOSS uploadImgOSS; public OSSConfMapper getOssConfMapper() { return ossConfMapper; } @Autowired public void setOssConfMapper(OSSConfMapper ossConfMapper) { UploadUtil.ossConfMapper = ossConfMapper; } public UploadImgOSS getUploadImgOSS() { return uploadImgOSS; } @Autowired public void setUploadImgOSS(UploadImgOSS uploadImgOSS) { UploadUtil.uploadImgOSS = uploadImgOSS; }
參考文檔spa
https://blog.csdn.net/kongrun12/article/details/76246369.net
https://blog.csdn.net/zxl646801924/article/details/81738231指針
https://blog.csdn.net/u014079773/article/details/66973830code
通過嘗試,有兩種實現方式
方式一:聲明一個靜態的變量或方法,再相應的注入一個對應的變量和方法,最後PostConstruct註解在init時實現。
代碼以下
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; import tylin.paas.transfers.util.DateUtil; import javax.annotation.PostConstruct; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedList; import java.util.List; @Slf4j @Component public class ErrorHandler { @Value("${customer.mail.bankMail.sender}") private String configSender; private static String sender; @Value("${customer.mail.bankMail.receiver}") private String configReceiver; private static String receiver; public static ErrorHandler errorHandler; @Autowired JavaMailSender autoJavaMailSender; private static JavaMailSender javaMailSender; @PostConstruct public void init() { sender = configSender; receiver = configReceiver; javaMailSender = autoJavaMailSender; errorHandler = this; } public static void sendMail() { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(sender); message.setTo(receiver.split(";")); message.setSubject("your subject"); message.setText("your content text"); try { javaMailSender.send(message); log.info("發送郵件成功!"); } catch (Exception e) { log.error("發送郵件時發生異常!", e); } } }
方式二:
在set時注入
import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; import org.springframework.test.context.junit4.SpringRunner; import org.tylin.TylinERPApplication; import java.text.SimpleDateFormat; import java.util.Date; @Slf4j @Component @SpringBootTest(classes = TylinERPApplication.class) @RunWith(SpringRunner.class) public class MailAutoSendTest { private static String sender; //能夠不要 public String getSender() { return sender; } @Value("${customer.mail.bankMail.sender}") public void setSender(String sender) { MailAutoSendTest.sender = sender; } private static String receiver; //能夠不要 public String getReceiver() { return receiver; } @Value("${customer.mail.bankMail.receiver}") public void setReceiver(String receiver) { MailAutoSendTest.receiver = receiver; } private static JavaMailSender javaMailSender; public JavaMailSender getJavaMailSender(){ return javaMailSender; } @Autowired public void setJavaMailSender(JavaMailSender javaMailSender){ MailAutoSendTest.javaMailSender = javaMailSender; } @Test public void sendMail() { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(sender); log.info(sender); log.info(receiver); message.setTo(receiver.split(";")); message.setSubject("xxxx"); Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); message.setText("xxxx"+dateFormat.format(date)); try { javaMailSender.send(message); log.info("簡單郵件已經發送。"); } catch (Exception e) { log.error("發送簡單郵件時發生異常!", e); } } }