有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

模板中的java Spring IOC嵌套bean重写属性值

我有一个template bean,它有一个嵌套的bean。嵌套bean有两个重要属性,一个对其他3个bean定义有效,但它们有一个secong属性,每个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模板和override the address property only。就这样

<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,我不知道如何引用它

更新

我只允许使用声明性配置

非常感谢


共 (1) 个答案

  1. # 1 楼答案

    使用Java配置检查此解决方案

    学校模式:

    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 {
    
    }
    

    弹簧配置:

    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