版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011171125/article/details/85223635
Spring入门学习 第五节
Bean之间的关系(继承,依赖)
继承
- 继续使用上节中创建的类。
- 创建一个Spring配置文件
beans-relation.xml
<bean id="address" class="com.fafa.spring.autowire.Address" p:city="NanJing" p:street="QiXiaQu"></bean> <!-- bean 配置的继承,使用bean的parent 属性指定继承哪个bean的配置 --> <bean id="address2" class="com.fafa.spring.autowire.Address" p:city="NanJing~" parent="address"></bean> <bean id="address3" class="com.fafa.spring.autowire.Address" parent="address"></bean> <bean id="address4" class="com.fafa.spring.autowire.Address" parent="address" p:street="XuWuQu"></bean>
parent
属性指定继承的bean - 创建测试方法:
测试结果:@Test public void testRelation(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:beans-relation.xml"); Address address2 = (Address)ctx.getBean("address2"); System.out.println(address2); }
address2继承了address中的属性。Address [city=NanJing~, street=QiXiaQu]
- 也可以创建抽象的bean继承
去掉class
属性,设置abstract="true"
,测试结果同上。<!-- 抽象bean:abstract="true"设置为抽象bean,它不能被IOC容器实例化, 只用来被继承配置 若某一个bean的class属性没有指定,则该bean必须是一个抽象bean, 若忽略了class属性则必须指定abstract属性 --> <bean id="address" p:city="NanJing" p:street="XuWuQu" abstract="true"></bean>
- 抽象的bean不能被实例化,只能被继承。
依赖
- 使用
depends-on
属性来设置bean的前置依赖<!-- bean之间的依赖关系 --> <!-- 要求在配置bean时,必须有一个关联的car!换句话说person这个bean依赖于Car这个bean 通过depends-on属性设置bean的前置依赖的bean,多个bean可以通过逗号隔开--> <bean id="person" class="com.fafa.spring.autowire.Person" p:name="Tom" p:address-ref="address2" depends-on="car"></bean>
- 此时使用测试方法测试person会报错
@Test public void testRelation(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:beans-relation.xml"); Person person = (Person)ctx.getBean("person"); System.out.println(person); }
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'car' is defined
- 现在定义一个car的bean
<bean id="car" class="com.fafa.spring.autowire.Car" p:brand="Audi" p:price="300000"></bean>
- 再次测试结果如下:
Person [name=Tom, address=Address [city=NanJing~, street=XuWuQu], car=null]