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属性中写的顺序是有关的