XML配置继承到基于Java的配置中的等价物是什么?
我知道Spring有基于配置的继承,这意味着我可以创建引用另一个bean作为父bean的bean,Spring将把定义的属性复制到子bean。我正在研究如何对基于Java的Spring配置执行同样的操作。我将用以下示例进行说明: 在Spring配置中,我可以定义以下用于保存值的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
属性
类:
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方法不受这个问题的影响吗?你会期望什么行为呢?我想我不够具体,我的意思是对类属性的更改,如果引入了一个新的字段值,并且beanpropertiesBase
设置了属性,那么在基于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;
}
}