Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML配置继承到基于Java的配置中的等价物是什么?_Java_Spring_Spring Boot_Spring Context - Fatal编程技术网

XML配置继承到基于Java的配置中的等价物是什么?

XML配置继承到基于Java的配置中的等价物是什么?,java,spring,spring-boot,spring-context,Java,Spring,Spring Boot,Spring Context,我知道Spring有基于配置的继承,这意味着我可以创建引用另一个bean作为父bean的bean,Spring将把定义的属性复制到子bean。我正在研究如何对基于Java的Spring配置执行同样的操作。我将用以下示例进行说明: 在Spring配置中,我可以定义以下用于保存值的属性类: package com.example class Properties { String valueA; String valueB; String valueC; } 稍后在Spr

我知道Spring有基于配置的继承,这意味着我可以创建引用另一个bean作为父bean的bean,Spring将把定义的属性复制到子bean。我正在研究如何对基于Java的Spring配置执行同样的操作。我将用以下示例进行说明:

在Spring配置中,我可以定义以下用于保存值的
属性
类:

package com.example

class Properties {
    String valueA;
    String valueB;
    String valueC;
}
稍后在Spring XML配置中,我可以使用配置继承定义以下3个bean:

<bean id="propertiesBase" class="com.example.Properties">
    <property name="valueA" value="someValueForA"/>
</bean>

<bean id="propertiesChild" parent="propertiesBases">
    <property name="valueB" value="someValueForB"/>
</bean>

<bean id="propertiesGrandChild" parent="propertiesChild">
    <property name="valueC" value="someValueForC"/>
</bean>

但这种方法存在一个问题,即如果类
属性
发生更改,那么所有
Bean
定义都需要相应地更改,以保持值的传播。对于这个问题,有没有另一种方法不受后一个问题的影响?

XML方法不受这个问题的影响吗?你会期望什么行为呢?我想我不够具体,我的意思是对类属性的更改,如果引入了一个新的字段值,并且bean
propertiesBase
设置了属性,那么在基于Java的方法中,我需要更改每个方法来传播值,但是在XML方法上,我不需要做这样的传播,它是Java代码,你可以做任何你想做的事情。只需提取一个对父级执行默认配置的方法,并为子级调用它。这样,如果父配置发生更改,您所需要做的就是更新该方法
package com.example.config

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import com.example.Properties;

@Configuration
class MyConfiguration {

    @Bean(name = "propertiesBase")
    Properties getPropertiesBase() {
        Properties p = new Properties();
        p.setValueA("someValueForA");
        return p;
    }

    @Bean(name = "propertiesChild")
    Properties getPropertiesChild(@Qualifier("propertiesBase") Properties parent) {
        Properties p = new Properties();
        p.setValueA(parent.getValueA());
        p.setValueB("someValueForB");
        return p;
    }

    @Bean(name = "propertiesGrandChild")
    Properties getPropertiesGrandChild(@Qualifier("propertiesChild") Properties parent) {
        Properties p = new Properties();
        p.setValueA(parent.getValueA());
        p.setValueB(parent.getValueB());
        p.setValueC("someValueForC");
        return p;
    }
}