8 - Spring Bean 作用域

1. Spring Bean作用域:为什么Spring Bean需要多种作用域?

在这里插入图片描述
主要关注singleton和prototype类型的作用域,其他主要用于模板引擎,现在流行前后端分离,因此不过多关注。

2. “singleton” Bean作用域:单例Bean在当前Spring应用真是唯一的吗?

在这里插入图片描述

  1. 在BeanDefinition中
/**
	 * Return whether this a <b>Singleton</b>, with a single, shared instance
	 * returned on all calls.
	 * @see #SCOPE_SINGLETON
	 */
	boolean isSingleton();

	/**
	 * Return whether this a <b>Prototype</b>, with an independent instance
	 * returned for each call.
	 * @since 3.0
	 * @see #SCOPE_PROTOTYPE
	 */
	boolean isPrototype();
  1. DefaultListableBeanFactory
    方法:
	private boolean isSingleton(String beanName, RootBeanDefinition mbd, @Nullable BeanDefinitionHolder dbd) {
		return (dbd != null ? mbd.isSingleton() : isSingleton(beanName));
	}
  1. FactoryBean
default boolean isSingleton() {
		return true;
	}

3.“prototype” Bean作用域:原型Bean在哪些场景下会创建新的实例?

在这里插入图片描述
注意事项
• Spring 容器没有办法管理 prototype Bean 的完整生命周期,也没有办法记录示例的存在。销毁回调方法将不会执行,可以利用 BeanPostProcessor 进行清扫工作。

结论一:
Singleton Bean 无论依赖查找还是依赖注入,均为同一个对象
Prototype Bean 无论依赖查找还是依赖注入,均为新生成的对象

结论二:
如果依赖注入集合类型的对象,Singleton Bean 和 Prototype Bean 均会存在一个
Prototype Bean 有别于其他地方的依赖注入 Prototype Bean

结论三:
无论是 Singleton 还是 Prototype Bean 均会执行初始化方法回调
不过仅 Singleton Bean 会执行销毁方法回调

4. “request” Bean 作用域

在这里插入图片描述

5. “session” Bean 作用域

在这里插入图片描述

6. “application” Bean 作用域

在这里插入图片描述

7. 自定义 Bean 作用域

在这里插入图片描述
在这里插入图片描述

8.面试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值