欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring_Bean之间的关系

程序员文章站 2024-02-20 23:33:52
...

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时:

Spring_Bean之间的关系

 使用InterlliJ IDEA时:

Spring_Bean之间的关系

依赖关系 用属性: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>