Spring @Value() 无法获取值,只有@Controller可以

avatar 2018年02月27日16:25:05 6 9503 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
在 SpringBoot 的使用中,通常想获取 application.properties 里的值,有三种方法。其中最简便的就是使用注解 @Value().



通过下面这个例子就能能很好理解

application.properties
  1. #qq企业邮箱
  2. spring.mail.host=smtp.exmail.qq.com
  3. spring.mail.username=master@liuyanzhao.com
  4. spring.mail.password=密码



MailService.java
  1. package com.liuyanzhao.chuyun.service;
  2. import ch.qos.logback.classic.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.core.io.FileSystemResource;
  7. import org.springframework.mail.SimpleMailMessage;
  8. import org.springframework.mail.javamail.JavaMailSender;
  9. import org.springframework.mail.javamail.MimeMessageHelper;
  10. import org.springframework.stereotype.Service;
  11. import javax.mail.MessagingException;
  12. import javax.mail.internet.MimeMessage;
  13. import java.io.File;
  14. /**
  15.  * @author 言曌
  16.  * @date 2018/2/6 下午8:25
  17.  */
  18. @Service
  19. public class MailService {
  20.     private final Logger logger = (Logger) LoggerFactory.getLogger(this.getClass());
  21.     @Autowired
  22.     private JavaMailSender sender;
  23.     @Value("${spring.mail.username}")
  24.     private String from;
  25.     /**
  26.      * 发送纯文本的简单邮件
  27.      *
  28.      * @param to
  29.      * @param subject
  30.      * @param content
  31.      */
  32.     public void sendSimpleMail(String to, String subject, String content) {
  33.         SimpleMailMessage message = new SimpleMailMessage();
  34.         message.setFrom(from);
  35.         message.setTo(to);
  36.         message.setSubject(subject);
  37.         message.setText(content);
  38.         try {
  39.             sender.send(message);
  40.             logger.info("简单邮件已经发送。");
  41.         } catch (Exception e) {
  42.             logger.error("发送简单邮件时发生异常!", e);
  43.         }
  44.     }
  45. }



但是今天在另一个类中使用时,@Value 一直无法获得值,总是 null。

经过一番百度搜索,找到了解决答案。

来自 CSDN 论坛 http://bbs.csdn.net/topics/390936459#post-400897178 ,32楼
我也遇到了这个问题,后来解决了,原因是如果有注入bean的那个类,在被其他类作为对象引用的话(被调用)。这个被调用的类也必须选择注解的方式,注入到调用他的那个类中,不能用 new出来做对象,new出来的对象再注入其他bean就会 发生获取不到的现象。所以要被调用的javabean,都需要@service,交给Spring去管理才可以,这样他就默认注入了。



后来在 Stack Overflow 也看到了类似的回答

https://stackoverflow.com/questions/39047333/spring-boot-value-properties



本文地址:https://liuyanzhao.com/7602.html



  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0