Spring_Bean之间的关系

本文介绍了Spring框架中Bean之间的两种主要关系:继承和依赖。Bean的继承允许子Bean从父Bean继承配置,同时可以覆盖部分属性。配置文件中,通过设置`abstract`属性为`true`可创建抽象Bean作为配置模板。依赖关系则通过`depends-on`属性来指定,表明一个Bean依赖于另一个Bean的存在,但不进行实际装配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring_Bean之间的关系:继承;依赖

继承Bean配置

Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父Bean的Bean称为子Bean

子Bean从父Bean中继承配置,包括Bean的属性配置

子Bean也可以覆盖从父Bean继承过来的配置

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="address" class="relation.Address" p:city="beijing" p:street="zhonghuajie"></bean>
   <!-- 这是常规的做法,属性赋值
    <bean id="address1" class="relation.Address" p:city="beijing" p:street="qixingjie"></bean>-->
   <!-- <bean id="address1" parent="address"></bean>
    bean 配置的继承: 使用bean的parent 属性指定继承哪个bean的配置-->
    <!--<bean id="address1" p:city="leizhou" p:street="qixingjie" parent="address"></bean>-->
    <bean id="address1" parent="address" p:street="qixingjie"></bean>
    <!--子Bean也可以覆盖从父Bean继承过来的配置-->
</beans>

 

父Bean可以作为配置模板,也可以作为Bean实例,若只想把父Bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个Bean

一个抽象bean: bean的abstract 属性为true的bean.这样的bean 不能被IOC容器实例化,只用来继承配置,若某一个bean的class属性没有指定,则该bean必须是一个抽象bean.

并不是<bean>元素里的所有属性都会被继承,比如:autowire,abstract等。

也可以忽略父Bean的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstracttrue 必须设为true.(这一点在Eclipse的话,可以实施。而在InterlliJ IDEA的话,就会报红。原因是Eclipse是隐形机制,而InterlliJ IDEA是要明确直指哪个类,要写出来才可以,不可以忽略)。

使用Eclipse时:

 使用InterlliJ IDEA时:

依赖关系 用属性:depends-on来指明要依赖哪个bean.

注意,只是依赖而已,不是像p:car-ref可以把car这个bean装配到person这个bean的属性car中,所以到最后的输出car结果是null。只是依赖存在而已,若是carbean不存在,则person这个bean也是不存在的。

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--也能够忽略父Bean的class属性,让子Bean指定自己的类,而共享同样的属性配置,但此时abstract必须设为true-->
    <bean id="address" class="relation.Address"
          p:city="beijing" p:street="zhonghuajie" abstract="true"/>

    <bean id="address1" class="relation.Address" p:city="beijing" p:street="zhonghuajie" parent="address"></bean>
    <bean id="car" class="relation.Car" p:name="benshi" p:num="1" p:color="red" p:price="100000.00"></bean>
<!--要求再配置Person时,必须有一个关联的car!换句话说person 这个bean依赖Car这个bean-->
    <bean id="person" class="relation.Person" p:name="chen" p:age="23" p:address-ref="address1" depends-on="car">
    </bean>

</beans>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值