import org.springframework.beans.factory.annotation.Value;
Run Code Online (Sandbox Code Playgroud)
我使用spring @ 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,无法从Spring.value获取defaultUrl。有人知道为什么吗?
就像duffymo在评论中说的那样,使用new意味着Spring不会管理您的新对象。因此,Spring不会对其进行任何注入。您需要使您的对象成为Spring托管的组件才能注入某些东西。
考虑创建某种PageFactory组件,在其上添加@Component注释,然后使用它来创建页面。这样,您就可以将所需的东西注入工厂,并用它来完成页面创建过程中喜欢的任何事情。
@Component
public class PageFactory {
@Value("${defaultUrl}")
private String defaultUrl;
public Page create() {
return new Page(defaultUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
有一个高级选项,为完整起见,我将提及它。您可以@Configurable在模型类上使用来将组件注入其中。但是,如果您刚开始使用该框架,则不建议使用一些半精巧的AOP配置。
| 归档时间: |
|
| 查看次数: |
6721 次 |
| 最近记录: |