Herencia y dependencia del frijol

Enlace original http://zhhll.icu/2021/01/30/%E6%A1%86%E6%9E%B6/spring/bean%E7%9A%84%E7%BB%A7%E6%89%BF % E5% 92% 8C% E4% BE% 9D% E8% B5% 96 /

Herencia y dependencia del frijol

Además de proporcionar una forma general de configurar beans, Spring también implementa las características heredadas en Java, estableciendo la relación padre-hijo del bean, de modo que se pueden omitir algunas configuraciones repetidas.

herencia de frijol

Configure la relación padre-hijo del bean, el bean padre lo tiene todo, el bean hijo lo hereda y no es lo mismo sobrescribir

<!-- bean的继承关系 -->
<bean id="parent" class="com.zhanghe.study.spring4.beans.beantest.Person">
    <property name="name" value="张三"/>
    <property name="car" ref="car"/>
    <property name="cars">
        <list>
            <ref bean="car"/>
            <ref bean="car2"/>
        </list>
    </property>
    <property name="carMap">
        <map>
            <entry key="AA" value-ref="car"/>
            <entry key="BB" value-ref="car2"/>
        </map>
    </property>
</bean>

<!-- 使用parent属性可以继承对应bean的所有属性 -->
<bean id="son" parent="person">
    <property name="name" value="张飞"/>
</bean>

Frijol abstracto

Dado que spring proporciona herencia, también hay un bean que se usa específicamente para heredado, sin instanciación. Este tipo de bean se denomina bean abstracto. El uso de abstract = "true" indica que se trata de un bean abstracto.

Dado que no se crea una instancia del bean abstracto, el atributo de clase del bean abstracto no tiene sentido y se puede omitir.

<!-- 抽象bean,不可被实例化-->
<bean id="abstract" abstract="true">
    <property name="name" value="张三"/>
    <property name="car" ref="car"/>
    <property name="cars">
        <list>
            <ref bean="car"/>
            <ref bean="car2"/>
        </list>
    </property>
    <property name="carMap">
        <map>
            <entry key="AA" value-ref="car"/>
            <entry key="BB" value-ref="car2"/>
        </map>
    </property>
</bean>

<!-- 使用parent属性可以继承对应bean的所有属性 -->
<bean id="personSon" class="com.zhanghe.study.spring4.beans.beantest.Person" parent="abstract">
    <property name="name" value="张飞"/>
</bean>

Nota: No se puede crear una instancia de un bean abstracto, lo que significa que el bean no se puede obtener a la fuerza utilizando el contexto, de lo contrario, se informará un error

org.springframework.beans.factory.BeanIsAbstractException: Error al crear el frijol con el nombre 'abstracto': la definición del frijol es abstracta

dependencia de frijol

A veces es necesario asegurar el orden de instanciación del bean. Al crear un bean, debe asegurarse de que también se cree otro bean. Si no existe otro bean, no se puede instanciar el bean normalmente.

Puede utilizar depende de para implementar dependencias entre beans

<!-- 依赖关系 -->
<bean id="person2" class="com.zhanghe.study.spring4.beans.beantest.Person" parent="abstract" depends-on="depend1">
    <property name="name" value="关羽"/>
</bean>

<bean id="depend1" class="com.zhanghe.study.spring4.beans.beantest.Person" parent="abstract">
    <property name="name" value="刘备"/>
</bean>

Si el bean dependiente no existe, la instanciación falla

警告: Se encontró una excepción durante la inicialización del contexto - cancelando el intento de actualización:
org.springframework.beans.factory.BeanCreationException:
Error al crear el bean con el nombre 'person2' definido en el recurso class path [spring-config.xml]:
'person2' depende del bean faltante 'depende1'; La excepción anidada es org.springframework.beans.factory.NoSuchBeanDefinitionException:
No hay ningún bean llamado 'depend1' disponible

Dado que su propio blog no está incluido en Baidu, la dirección del blog es http://zhhll.icu

Supongo que te gusta

Origin blog.csdn.net/Lxn2zh/article/details/113969570
Recomendado
Clasificación