![](https://csdnimg.cn/release/download_crawler_static/12336774/bg6.jpg)
以后想使用的这个list的时候,直接调 cars 即可,其他的集合类似。当然Spring中也提供了自动装配的
功能在 <bean> 标签中指定好 class 属性后,添加一个 autowire 属性,可以选择按名字自动装配或者
按类型自动装配,比如下面的:
上述是Bean的基本配置方式,在实在配置中可能存在多个bean之间大部分的属性相同,这个时候,有
很多工作都是机械的重复,类似于java的继承关系,Bean的配置也提供了这种关系,在定义bean的时
候,可以通过parent属性指定父类Bean的id,从而继承父类Bean的所有属性,子类Bean可以根据自己
的需要对部分属性进行重写,比如下面的配置:
person2的属性继承了person,所以person的属性他也有,只是对person2的姓名进行了重写,比较方
便,输出信息如下:
父类Bean可以作为一个实例Bean存在,就想上面的person,当然父类Bean也可以声明为抽象Bean,
此时他不能被IOC容器实例化,专门用作其他Bean的继承(可以理解为一系列Bean的配置模板),在定义
的时候要加上 abstract="true" 的声明,如下:
【注意】如果一个Bean的class属性没有被指定,那么该Bean必定是一个抽象Bean。
除此之外,Bean之间除了继承关系,也可以存在依赖关系,比如有一个需求就是每个人必须要定义一
个Address的Bean,这里必须要有就可以理解为Person依赖于Address,如果在定义Person的Bean
时,指定了对Address的依赖,那么必须对Address的Bean进行配置,否则报错,这种依赖关系在定义
Bean的时候通过depends-on属性值来指定,如果依赖多个Bean可以用逗号或者空格来区分开:
这种被依赖的Bean称之为前置Bean,前置Bean在被IOC容器初始化的时候会在依赖该Bean的Bean初
始化之前被初始化。
<util:list id="cars">
<ref bean="car"/>
<ref bean="car2"/>
</util:list>
<bean id="person" class="com.mkk.spring.autowire.Person" autowire="byName">
</bean>
<bean id="person" class="com.mkk.spring.autowire.Person">
<property name="car" ref="car"></property>
<property name="address" ref="address"></property>
<property name="name" value="Jack"></property>
</bean>
<bean id="person2" parent="person">
<property name="name" value="testParent"></property>
</bean>
Person{name='Jack', address=Address{city='Nanjing', street='Xianlin'},
car=Car{brand='Audi', corp='Shanghai', price=5000.0, maxSpeed=0}}
Person{name='testParent', address=Address{city='Nanjing', street='Xianlin'},
car=Car{brand='Audi', corp='Shanghai', price=5000.0, maxSpeed=0}}
<bean id="person" class="com.mkk.spring.autowire.Person" abstract="true"></bean>
<bean id="person" class="com.mkk.spring.autowire.Person" depends-on="address">
</bean>