❤ 面试题

Spring Bean的作用域之间有什么区别?

❤ bean 的作用域

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图1

一、代码示例 singleton

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图2

1、bean.xml 不设置作用域。

首次执行空方法 testBook ,内部未调用 getBean。

结果如下

  • 调用了 Book 的无参构造器。

说明 IOC 容器对象一创建,就创建了 Book 对象。

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图3

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图4

2、bean.xml 设置作用域为 singleton

首次执行方法 testBook,方法内部调用两次 getBean 方法。
结果如下

  • (1) 调用了 Book 的无参构造器;
  • (2) 对比两个引用,结果为 true,说明两个引用指向的是同一个对象

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图5

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图6

3、小结 singleton

  • 如果不指定 Spring Bean 的作用域,则默认 singleton
  • 如果 Spring Bean 的作用域为 singleton,则
    • IOC 容器对象一创建,就创建 Bean 实例。
    • Bean 以单实例的方式存在

二、代码示例 prototype

1、bean.xml 设置作用域为 prototype

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图7

2、首次执行空方法 testBook

  • 结果:并没有调用了 Book 的无参构造器!
  • 说明:IOC 容器对象一创建,并没有 Book 对象。

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图8

3、首次非空执行方法 testBook ,其中调用两次 getBean,返回两个对象引用。

7-第一季-07_尚硅谷_SSM面试题_Spring Bean的作用域之间有什么区别-2021-03-12 - 图9


☀** **课堂小测

  • Spring Bean的作用域之间有什么区别?