1 Bean之间的关系

1.1 继承 Bean 配置

Spring 允许继承 bean 的配置, 被继承的 bean 称为父 bean. 继承这个父 Bean 的 Bean 称为子 Bean

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

1.2

有时候我们的代码相似,但是要重复写 ,显得很麻烦
(5)Spring - Bean之间的关系、作用域
除了id和stree的值不同,其余是一样的。

解决办法: 1.3、继承

我们把相同的部分去掉,然后写上parent
(5)Spring - Bean之间的关系、作用域
输出一下结果显示:(可行)
(5)Spring - Bean之间的关系、作用域

1.4、抽象Bean

有时候我们希望,我们创建的bean不想是实例,我们可以把它弄成一个模板。
解决办法:抽象类(只能被继承,不能被实例)

(1)输出抽象bean address
(5)Spring - Bean之间的关系、作用域
结果显示(报错):
(5)Spring - Bean之间的关系、作用域

(2)不输出抽象bean address
(5)Spring - Bean之间的关系、作用域

结果显示:(单独输出Address2)
(5)Spring - Bean之间的关系、作用域

总结: 抽象Bean的abstract属性为true的bean. 这样的bean不能被IOC容器实例化

1.5 依赖 Bean 配置

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

1.6 依赖关系

我们获取一个Person的Bean 获取结果

(5)Spring - Bean之间的关系、作用域
输出Person:(结果正常)

(5)Spring - Bean之间的关系、作用域

但是如果我们的项目要求,我们配置一个Person的时候 必须要有一个car呢?(指创建Person的时候,如果没有Car 就不能实例化)
换句话说person这个bean依赖于Car这个Bean

(1)没写Car

(5)Spring - Bean之间的关系、作用域
输出Person:

(5)Spring - Bean之间的关系、作用域
(2)写上Car
(5)Spring - Bean之间的关系、作用域

输出结果:
(5)Spring - Bean之间的关系、作用域

2 Bean的作用域

我们先来测试一下Bean的作用域
(5)Spring - Bean之间的关系、作用域

(5)Spring - Bean之间的关系、作用域

结果显示:
(5)Spring - Bean之间的关系、作用域
证明两者是同一个对象。

2.1 加上 scope=“prototype”

(5)Spring - Bean之间的关系、作用域
结果显示:
(5)Spring - Bean之间的关系、作用域
证明两者不是同一个对象;

2.2 加上scope=“singleton”

我们在Car类里面加一个无参构造器:
(5)Spring - Bean之间的关系、作用域

Main里面:
(5)Spring - Bean之间的关系、作用域
结果显示:()
(5)Spring - Bean之间的关系、作用域

总结:在我创建容器的时候,这个Bean已经被初始化好了,每次只要从容器里面获取这个Bean的话,会返回已经创建好的那个Bean

在Main里面的注释解除掉:
(5)Spring - Bean之间的关系、作用域

结果显示:
(5)Spring - Bean之间的关系、作用域

如果又改成prototype:
(5)Spring - Bean之间的关系、作用域
Main里面都注释掉 只创建容器:
(5)Spring - Bean之间的关系、作用域
结果显示:
(5)Spring - Bean之间的关系、作用域
在我创建容器的时候,这个Bean没有创建

我们把Main里面的注释接触掉:
(5)Spring - Bean之间的关系、作用域
结果显示:
(5)Spring - Bean之间的关系、作用域

总结:
使用bean的scope属性来配置bean的作用域
singleton:默认值,容器初始时创建bean实例,在整个容器的生命周期内只创建者一个bean. 单例的
prototype:原型的,容器初始化时不创建bean的实例,而在每次请求时都创建一个新的Bean实例,并返回

相关文章:

  • 2021-08-31
  • 2021-08-07
  • 2022-01-30
  • 2021-12-13
  • 2022-01-02
  • 2021-04-15
  • 2021-04-23
猜你喜欢
  • 2021-12-16
  • 2021-10-19
  • 2021-07-13
  • 2021-10-13
  • 2021-10-01
  • 2021-12-11
  • 2022-01-25
相关资源
相似解决方案