Java 使用弹簧特性动态创建新对象
我想动态创建Foo对象,但我希望Foo的一个字段由Spring的xml文件定义的属性值填充 例如,我有以下Foo类:Java 使用弹簧特性动态创建新对象,java,spring,properties,dependency-injection,Java,Spring,Properties,Dependency Injection,我想动态创建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(){
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。您可以使用AutowireCapableBeanFactory。引自javadoc:
其他框架的集成代码可以利用此接口
连接并填充Spring无法控制的现有bean实例
的生命周期
有一种方法可以将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或环境。只要foo可以访问ApplicationContext或环境,我们就可以随时提取属性值并使用它来构造foo