【发布时间】:2015-12-20 11:01:10
【问题描述】:
当我在 application.properties 文件中添加一个属性时,可以从主类毫无问题地访问它。
@SpringBootApplication
@ComponentScan(basePackages = "com.example.*")
public class MailTestApplication implements CommandLineRunner {
@Value("${admin.mail}")
String email;
public static void main(String[] args) {
SpringApplication.run(MailTestApplication.class, args);
}
@Override
public void run(String... strings) throws Exception {
System.out.println(email);
Email email = new Email();
email.sendMail();
}
}
但是,当我尝试从任何其他类访问它时,它永远不会被检索到。
@Component
public class Email {
@Autowired
private MailSender sender;
@Value("${admin.mail}")
String email;
public Email() {
}
public void sendMail() {
SimpleMailMessage msg = new SimpleMailMessage();
System.out.println(email);
msg.setTo("sample@email.com");
msg.setSubject("Send mail by Spring Boot");
msg.setText("Send mail by Spring Boot");
sender.send(msg);
}
}
我正在阅读其他用户之前发布的一些问题,但对我没有明确的结果。我什至试图找到一些结果相似的例子。
有人可以给我任何线索吗?
非常感谢。
【问题讨论】:
-
如果您发现任何错误。在此处粘贴堆栈跟踪。
-
属性读取完全没有错误。问题是当我尝试从任何非主类中读取该值时,该值始终为空。
-
我对弹簧靴不熟悉。我怀疑这可能是范围或依赖性的问题。我建议您在主类中获取该属性,存储在成员变量中,创建 getter 和 setter,并尝试通过注入主类实例从其他类访问变量的 getter 方法。这种方法会更好,因为您不会重复访问属性文件。
-
这可能是一种解决方法,但不是解决方案本身。我宁愿知道它是如何工作的,以更好地理解框架。
-
这并不能直接回答您的问题,但我一直倾向于将 Environment 注入我的组件并从中读取属性。我觉得它更干净一些。