一、问题描述
近日在做邮件发送功能时 莫名其妙的出现了NullPointerException空指针异常。
代码在测试的时候完全正常 但封装成工具类再调用的时候就报错。
在解决的过程中也查找过很多相关资料 但帮助不是很大。
有个方法是添加@PostConstruct注解然后初始化 但是并没有作用
还有个方法是新建一个普通类 确实能解决部分问题(如果你不是用Thymeleaf模板发送的话)
将
改为:
但我在邮件里需要发送Thymeleaf页面 因此需要注入TemplateEngine随后 在用该方法注入TemplateEngine的时候:
在解析模板页面的时候直接发送了字符串比如:
邮件里直接发送了"mailTemplate"字符串 根本不是我要发送的页面内容 这谁顶得住呀?
因此 该方法也被否决了
这个问题研究一整天了 然而 在我的努力下 终于在无意间成功解决了?
二、解决方法
1.我在邮件发送工具类里给注入的JavaMailSenderImpl加上了static 这个static必须去掉
因为静态方法是属于类的 普通方法才是属于实体对象(即New出来的对象)的
spring注入是在容器中实例化对象 所以不能使用静态方法
2.要给工具类加上@Component注解
用@autowired注入JavaMailSenderImpl后 将整个类交给了Spring管理
因此类上必须加@Component
在调用该工具类的时候也要用@Autowired注入
因此 最终的工具类代码是这样的:
mailTemplate.html 模板页面:
测试:
编辑整理 丨王田浩