Bean Definition Inheritance
Why do we need it?
- Used for common set of definitions across multiple beans
- Inherit bean definition across other beans
- Can be a bean itself
- Can be an abstract bean, just to be overridden
Example
config.xml
[code language=”xml”]
<bean id=”parentbean” class=”…”>
<property name=”commonPropertyName” value=”commonValue” />
</bean>
<bean id=”childA” class=”…” parent=”parentbean”>
<property name=”childAPropertyName” value=”childAValue” />
</bean>
<bean id=”childB” class=”…” parent=”parentbean”>
<property name=”childBPropertyName” value=”childBValue” />
</bean>
[/code]
childA and childB will both inherit the property definition commonPropertyName with a value of commonValue, but will each have their own properties as well.
Example with Lists
config.xml
[code language=”xml”]
<bean id=”parentbean” class=”…”>
<property name=”mylist”>
<list>
<value ref=”dependentBean1″ />
<value ref=”dependentBean2″ />
</list>
</property>
</bean>
<bean id=”childA” class=”…” parent=”parentbean”>
<property name=”mylist”>
<list>
<value ref=”dependentBean3″ />
</list>
</property>
</bean>
<bean id=”childB” class=”…” parent=”parentbean”>
<property name=”mylist”>
<list merge=”true”>
<value ref=”dependentBean4″ />
</list>
</property>
</bean>
[/code]
childA and childB will both inherit the mylist property containing dependentBean1 and dependentBean2.
However
- childA will override the property values inherited with its single value of dependentBean3
- childB will merge the inherited property values with dependentBean4
Making the Parent Bean Abstract
config.xml
[code language=”xml”]
<bean id=”parentbean” class=”…” abstract=”true”>
<property name=”mylist”>
<list>
<value ref=”dependentBean1″ />
<value ref=”dependentBean2″ />
</list>
</property>
</bean>
…
[/code]