2016-07-08 120 views
0

我創建了一個簡單的JavaMailSender彈簧引導應用程序(僅用於娛樂)。下面是對代碼的引用在GitHub上:Spring @Value屬性在自定義pojo中爲null

https://github.com/carlcorder/mail.sender

我有一個問題,即電子郵件類中,「從」屬性爲空,即使我有@Value註釋它(除此之外,一切都完美)。該類如下:

package com.mail.sender.domain; 

import lombok.NonNull; 
import org.springframework.beans.factory.annotation.Value; 

@lombok.Data 
@lombok.AllArgsConstructor 
@lombok.NoArgsConstructor 
@lombok.Builder 
public class Email { 

    @NonNull 
    private String to; 

    @NonNull 
    //@Value("{spring.mail.username}") --> this is always null 
    private String from; 

    @NonNull 
    private String subject; 

    private String body; 

} 

我看過這些帖子和理解這個問題是最可能與。

Difference between applicationContext.xml and spring-servlet.xml in Spring Framework

這:

Spring @Value annotation in @Controller class not evaluating to value inside properties file

不過,我仍然無法得到任何工作。任何幫助將不勝感激。

+1

刪除它忘記了前面的'$''$ {spring.mail.username}' – ndrone

+3

Ofcourse這將是'null'。它不是一個Spring管理的類,而是一個在該範圍之外創建的對象(由Spring MVC類來綁定你的JSON)。這些對象不會被處理,因此'@ Value'不起作用。此外,爲什麼你想要在你的電子郵件類的屬性,它應該屬於你的服務作爲屬性,而不是作爲傳入的對象的一部分。 –

+0

好的,謝謝你的解釋。我認爲該屬性最好屬於電子郵件域對象,因爲Spring MailProperties的用戶名屬性始終是從application.properties傳遞的值。通過使用此值設置Email對象的「from」字段,可以更明確地指出該字段將/應該只有每個值都來自屬性文件。 –

回答

0

作爲Deinum,在評論中提到,對於非彈簧託管類,值將不會被替換。

對於您的情況,由於您將from配置爲配置,因此可以將該字段移至MailSenderService類。

在那裏您需要聲明該字段爲@Value註釋。 也如@ndrone所述,屬性名稱應以$爲前綴。

添加下面MailSenderService和電子郵件類

@Value("${spring.mail.username}") 
private String from;