我想动态创建Foo对象,但我希望Foo的一个字段由Spring的xml文件定义的属性值填充。
例如,我有以下Foo类:
public class Foo {
@Value("${val1}")
private String val1;
private String val2
public foo(String val2) {
this.val2 = val2;
}
public String getVal1(){
return val1;
}
public void setVal1(String val1) {
this.val1 = val1;
}
}
现在,我知道@Value将为null,因为我的Foo对象未在我的XML文件中定义为bean。但是,我不想将它定义为bean,因为我需要动态定义val2,如下所示:
Foo foo = new Foo("val2");
有没有办法将val1注入到创建的每个Foo实例中?我知道new
运算符超出了Spring的范围,因此无法注入值,但我主要是寻找在Foo的新实例中动态指定val2同时还使用Spring注入val1的任何方法。
答案 0 :(得分:0)
您可以使用AutowireCapableBeanFactory。引自javadoc:
其他框架的集成代码可以利用此接口 连接并填充Spring无法控制的现有bean实例 的生命周期。
答案 1 :(得分:0)
有一种方法可以将val1注入到每个新创建的Foo实例中。 val1的值可以直接通过spring上下文注入。
这就是我的意思
public class Foo {
private String val1;
private String val2
public foo(AbstractApplicationContext springContext, String val2) {
this.val2 = val2;
this.val1 = springContext.getEnvironment().getProperty("val1");
}
public String getVal1(){
return val1;
}
public void setVal1(String val1) {
this.val1 = val1;
}
}
我们上面所做的是通过构造函数传递上下文以获取属性值。
这不需要以上面指定的确切方式实现。我们只需要确保Foo可以访问ApplicationContext或Environment。只要foo可以访问ApplicationContext或Environment,我们总是可以将属性值拉出来并用它来构造Foo。