Bean之间的关系

Bean之间的关系:继承;依赖

Bean配置的继承

  • Spring允许继承bean的配置,被继承的bean成为父bean。继承这个父Bean的Bean称为子Bean
  • 子Bean从父Bean中继承配置,包括Bean的属性配置
  • 子Bean也可以覆盖从父Bean继承过来的配置
  • 父Bean可以作为配置模板,也可以作为Bean的实例。若只想把父Bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个Bean
  • 并不是<bean>元素里的所有属性都会被继承。比如:autowire,abstract等。
  • 可以忽略父Bean的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstract必须设为true

继承父Bean实例:

1
2
3
4
5
6
<bean id = "address" class = "com.spring.helloWorld.Address" 
p:city = "Beijing" p:street="WuDaoKou"></bean>

<!-- bean 配置的继承:使用 bean 的 parent 属性指定继承哪个 bean 的配置 -->
<bean id = "address2" class = "com.spring.helloWorld.Address"
p:street="DaZhongSi" parent = "address"></bean>

输出结果:
Address [city=BeiJing,street=WuDaoKou]
Address [city=BeiJing,street=DaZhongSi]

抽象Bean实例:

1
2
3
4
5
6
7
8
<!-- 抽象Bean:bean的abstract属性为true的bean,不能被IOC容器实例化,可以作为模板被继承。
若某一个bean的class属性没有指定,则该bean必须是一个抽象bean。 -->
<bean id = "address"
p:city = "Beijing" p:street="WuDaoKou" abstract = "true"></bean>

<!-- 继承模板Bean -->
<bean id = "address2" class = "com.spring.helloWorld.Address"
parent = "address"></bean>

输出结果:
Address [city=BeiJing,street=WuDaoKou]
Address [city=BeiJing,street=WuDaoKou]

依赖Bean配置

  • Spring允许用户通过depends-on属性设定Bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化之前创建好
  • 如果前置依赖于多个Bean,则可以通过逗号,空格的方式配置Bean的名称

依赖Bean实例:

1
2
3
4
5
6
7
<!-- 缺少这个bean会报错 -->
<bean id = "car" class = "com.spring.helloWorld.Car"
p:brand = "Audi" p:price = "300000" ></bean>
<!-- 要求配置Person时,必须有一个关联的car!换句话说person这个bean依赖于Car这个bean,
如果缺少就会报错 -->
<bean id = "person" class = "com.spring.helloWorld.person"
p:name = "Tom" p:address-ref="address2" depends-on="car"></bean>

-------------本文结束 感谢您的阅读-------------
文章对我有益,我要小额赞赏...