我有一个 template bean
,它有一个嵌套的 bean
。嵌套 bean 有 2 个重要属性,一个对其他 3 个 bean 定义有效,但它们有一个第二个属性,每个 bean 都会发生变化。
我的模板是这样的。没有类的 bean。
<bean id="myBeanTemplate" abstract="true" scope="prototype">
<property name="school">
<bean class="com.model.School" scope="prototype">
<property name="status" value="true"/><!--is all the same for all the child beans..->
/*address=?? the property which is change across the children beans.. the property to be set*/
</bean>
</property>
</bean>
这里我没有设置 addres
属性只是因为它们在下面的 bean 声明中有所不同我想做的就是使用上面的 bean 模板并仅覆盖地址属性
。就像这样。
<bean id="myBeanForStudentsInSchool13" class="com.model.Students" parent="myBeanTemplate" scope="prototype">
here i want to set the address property to a value
</bean>
<bean id="myBeanForStudentsInSchool23" class="com.model.Students" parent="myBeanTemplate" scope="prototype">
here i want to set the address property a different value
</bean>
但是就像是一个嵌套的 bean 我不知道如何引用它...
更新
我被允许只使用声明式配置...
非常感谢..
最佳答案
使用 Java Config 检查此解决方案。
学校模型:
public class School {
private boolean status;
private String address;
// getters & setters
}
Bean 模板:
public abstract class MyBeanTemplate {
private School school;
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
}
学生类:
public class Students extends School {
}
Spring 配置:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
@Bean
public Students myBeanForStudentsInSchool13() {
Students students = new Students();
students.setAddress("myBeanForStudentsInSchool13");
return students;
}
@Bean
public Students myBeanForStudentsInSchool23() {
Students students = new Students();
students.setAddress("myBeanForStudentsInSchool23");
return students;
}
}
编辑
对于 XML 配置,请查看此示例(注意子 bean 中的点):
<bean id="myBeanTemplate" abstract="true" class="com.beans.MyBeanTemplate">
<property name="school">
<bean class="com.model.School">
<property name="status" value="true"/>
</bean>
</property>
</bean>
<bean id="myBeanForStudentsInSchool13" class="com.model.Students" parent="myBeanTemplate">
<property name="school.address" value="myBeanForStudentsInSchool13"/>
</bean>
<bean id="myBeanForStudentsInSchool23" class="com.model.Students" parent="myBeanTemplate">
<property name="school.address" value="myBeanForStudentsInSchool23"/>
</bean>
您还可以在此处查看更详细的答案:spring - constructor injection and overriding parent definition of nested bean
关于java - 模板中的 Spring IOC 嵌套 bean 覆盖属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087525/