2016-03-03 152 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"/>