java - 模板中的 Spring IOC 嵌套 bean 覆盖属性值

标签 java spring inversion-of-control

我有一个 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/

相关文章:

.net - 在 Ninject 中将单例绑定(bind)到多个服务

java - android访问扩展类中的对象

java - Flink - 构建作业以最大化吞吐量

java - 如何查找 BindingResult 中的错误原因

java - 如何获取有关 Java 文件中表达式的类型信息?

javascript - XHR 加载失败 : POST java spring

java - 是否可以为所有请求共享相同的对象?

java - 将 Spring cloud sleuth 与 Spring 项目集成

python - 为什么 IoC/DI 在 Python 中不常见?

c# - 使用 MEF 加载多个插件实例