注:用static去定义一个注入的方法或者配置文件值变量,编译时不会有任何异常,运行时会报空指针。
Spring官方不推荐此种方法。
原理:
https://www.cnblogs.com/chenfeng1122/p/6270217.html
解决办法
利用spring的set注入方法,通过非静态的setter方法注入静态变量 ,我们可以改成这样就静态变量可以获取到你配置的信息了。
把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; }
参考文档
https://blog.csdn.net/kongrun12/article/details/76246369
https://blog.csdn.net/zxl646801924/article/details/81738231
https://blog.csdn.net/u014079773/article/details/66973830
经过尝试,有两种实现方式
方式一:声明一个静态的变量或方法,再相应的注入一个对应的变量和方法,最后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); } } }
分类:
Java
, SpringBoot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)
2018-05-19 将本地项目推送至gitee或者github
2018-05-19 ECharts 报表事件联动系列四:柱状图,折线图,饼状图实现联动
2018-05-19 ECharts 报表事件联动系列三:柱状图,饼状图实现联动
2018-05-19 ECharts 报表事件联动系列二:柱状图,饼状图添加事件
2018-05-19 Echarts 简单报表系列四:雷达图
2018-05-19 ECharts 报表事件联动系列一:刷新页面
2018-05-19 Echarts 简单报表系列三:饼状图