spring学习笔记-IOC容器中bean的继承、抽象和依赖关系

    技术2025-12-09  8

    1.bean的继承

    IOC容器中bean的继承和java或者其他语言中传统意义上的继承并不一样,它并不是说将其他class中的属性或方法继承过来(比如我们的业务对象继承baseEntity对象,它相当于是一个增量的继承),而IOC容器中bean的继承更像是克隆一样,当我们继承了其他bean对象时,我们就相当于得到了一个被继承bean的克隆体,我们只需要起一个别名(bean的id属性)就可以了,或者也可以修改其中的某个属性。

    在bean中使用parent属性继承bean对象

    <bean id="rule1" class="com.hao.spring.user.Rule"> <property name="ruleName" value="数据查看角色"></property> <property name="power" value="全数据查看权限"></property> </bean> <bean id="rule2" parent="rule1"> <property name="power" value="rule2-全数据查看权限"></property> </bean>

    在测试类中获取并打印rule2对象

    2. bean的抽象

    IOC容器中的抽象bean在创建容器时是不会被创建的,它的唯一作用就是作为克隆母体而存在的,它生来就是为了被继承的

    我们可以看到之前我们的rule1和rule2都是普通对象,所以在创建容器时调用了两次rule的无参构造器,说明创建了两次rule对象 当我们把rule1声明为抽象对象时,再用user引用rule2,这时就只创建了一次rule对象,说明抽象的rule1并不会被容器创建 在bean标签中使用abstract属性,将该bean声明为抽象bean

    <bean id="rule1" class="com.hao.spring.user.Rule" abstract="true"> <property name="ruleName" value="数据查看角色"></property> <property name="power" value="全数据查看权限"></property> </bean>

    3. bean的依赖关系

    bean依赖关系的配置是为了确定在创建当前bean时应该先创建哪个bean

    没有引用且没有依赖关系时,容器中对象的创建顺序是按照顺序创建的 当前bean有ref引用时,IOC容器会先创建当前对象,并在对进行当前对象的初始化赋值时遇到ref的属性,就会去检索IOC容器中的对象,如果没有创建就会先创建这个被引用的对象,如果初始化完成则创建下一个bean对象,但如果又遇到另一个ref引用对象,又会去检索IOC容器,直到完成对当前bean对象的创建 所以当我们的bean对象需要去引用外部对象时,我们就可以使用depends-on=""属性指定依赖关系 <bean id="user" class="com.hao.spring.user.User" depends-on="rule2,org"> <property name="rule" ref="rule2"></property> <property name="org" ref="org"></property> </bean>

    需要注意的是依赖的创建顺序与我们在depends-on属性中写的顺序是有关的

    Processed: 0.009, SQL: 9