Spring入门学习(Bean之间的关系) 第五节

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011171125/article/details/85223635

Spring入门学习 第五节

Bean之间的关系(继承,依赖)

继承

  1. 继续使用上节中创建的类。
  2. 创建一个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
  3. 创建测试方法:
    @Test
    public void testRelation(){
    	ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:beans-relation.xml");
    
    	Address address2 = (Address)ctx.getBean("address2");
    	System.out.println(address2);
    }
    
    测试结果:
    Address [city=NanJing~, street=QiXiaQu]
    
    address2继承了address中的属性。
  4. 也可以创建抽象的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>
    
  5. 抽象的bean不能被实例化,只能被继承。

依赖

  1. 使用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>
    
  2. 此时使用测试方法测试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
    
  3. 现在定义一个car的bean
    <bean id="car" class="com.fafa.spring.autowire.Car"
    	p:brand="Audi" p:price="300000"></bean>
    
  4. 再次测试结果如下:
    Person [name=Tom, address=Address [city=NanJing~, street=XuWuQu], car=null]
    

猜你喜欢

转载自blog.csdn.net/u011171125/article/details/85223635