1. 继承
- bean之间的继承只是配置之间的继承,子bean继承父bean的所有配置与属性,子bean可以覆盖父bean中继承过来的内容;
- 父bean可以作为模板,也可以作为实例,如果只是作为模板则需要将abstract属性设置为true,这样将不会对其进行实例;
- 子bean并不是继承所有的父bean的属性;
- 子bean是可以覆盖父bean的class属性,但是此时abstract属性必须为true
设置xml文件
<bean id="address1" class="spring.autowire.Address" p:city="ShanXi" p:street="XiAn"></bean>
<!-- 使用parent属性指定要继承的bean-->
<bean id="address2" parent="address1" p:street="HanZhong"></bean>
主函数
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans-relation.xml");
Address address = (Address) applicationContext.getBean("address1");
System.out.println(address.toString());
address = (Address) applicationContext.getBean("address2");
System.out.println(address.toString());
}
运行结果
2. 依赖
- spring通过depends-on属性设置bean前置依赖的bean,前置的bean会在当前bean实例化之前创建完成;
- 前置依赖的bean可以有多个,通过逗号、空格或者其他方式配置bean的名称
配置xml文件
<bean id="address1" class="spring.autowire.Address" p:city="ShanXi" p:street="XiAn"></bean>
<bean id="car" class="spring.autowire.Car" p:brand="BaoJun" p:price="10000"></bean>
<bean id="person" class="spring.autowire.Person" p:address-ref="address1" depends-on="car"></bean>
运行主函数
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans-relation.xml");
Person person = (Person) applicationContext.getBean("person");
System.out.println(person.toString());
}
在加上依赖属性后,如果没有配置相应的前置bean将会报错
运行结果