2016-03-03 151 views
1
import org.springframework.beans.factory.annotation.Value; 

我用春天@價值得到配置值,它工作在其他類(控制器和其他服務)的罰款,但它不能在一個模型:春天@Value不能工作

public final class Page { 
    @Value("${defaultUrl}") 
    private static String defaultUrl; 

    private String url; 

    public Page(String url) { 
    this.url = url; 
    } 
    public Page() { 
    this(defaultUrl); 
    } 
} 

在上面的例子中,從Spring.value獲取defaultUrl是不可能的。有人知道爲什麼

+0

如何實例化頁面? –

+0

@SleimanJneidi as return new Page();我不認爲這是相關的。 – erkpwejropi

+3

調用新的意味着不受Spring的控制。它不是/或。難怪你的Spring註解不起作用。 – duffymo

回答

4

像duffymo說,在他的評論中,用new意味着春天不負責管理你的新對象。所以Spring不會注入任何東西。你需要讓你的對象是一個Spring管理的組件來注入一些東西。

考慮創建某種PageFactory組件,在其上放置一個@Component註釋,然後使用它創建頁面。這樣,您可以將需要的東西注入工廠,並在創建頁面時使用它來做任何你喜歡的事情。

@Component 
public class PageFactory { 
    @Value("${defaultUrl}") 
    private String defaultUrl; 

    public Page create() { 
     return new Page(defaultUrl); 
    } 
} 

有一個高級選項,我只是爲了完整起見而提到。您可以在模型類上使用@Configurable將組件注入其中。但是,如果您剛開始使用該框架,則不會推薦一些半棘手的AOP配置。

0

你的類必須是一個Spring bean,請參閱參考AutowiredAnnotationBeanPostProcessor(source

還你一個有上下文屬性佔位符?

<context:property-placeholder location="classpath:/default.properties"/>