1.spring支持bean的作用域有几种吗?每种作用域是什么样的?
2.学习编程|Spring源码深度解析 读书笔记 第4章:bean的加载
spring支持bean的作用域有几种吗?每种作用域是什么样的?
Spring框架提供了五种bean的作用域,解答您关于Spring bean作用域的问题。以下是详细解析:
1. Singleton(单例):Spring的默认作用域。在Spring IoC容器中,Singleton类型的Bean仅有一个实例存在。由BeanFactory负责维护这一实例。薇源码
2. Prototype(原型):每次通过容器的getBean方法获取Prototype类型的Bean时,都会产生一个新的实例。一个bean定义可以有多个实例。
3. Request(请求):仅在基于web的Spring ApplicationContext情形下有效。每次HTTP请求时,使用Request定义的Bean都会产生一个新实例,即每次请求将产生不同的左侧菜单源码Bean实例。
4. Session(会话):同样仅在Web应用中使用Spring时有效。对于每次HTTP Session,使用Session定义的Bean都将产生一个新实例。
学习编程|Spring源码深度解析 读书笔记 第4章:bean的加载
在Spring框架中,bean的加载过程是一个精细且有序的过程。首先,wcs系统 源码当需要加载bean时,Spring会尝试通过转换beanName来识别目标对象,可能涉及到别名或FactoryBean的识别。
加载过程分为几步:从缓存查找单例,Spring容器内单例只创建一次,若缓存中无数据,发卡 源码 独立会尝试从singletonFactories寻找。接着是bean的实例化,从缓存获取原始状态后,可能需要进一步处理以符合预期状态。
原型模式的依赖检查是单例模式特有的,用来避免循环依赖问题。迅雷播放源码然后,如果缓存中无数据,会检查parentBeanFactory,递归加载配置。BeanDefinition会被转换为RootBeanDefinition,合并父类属性,确保依赖的正确初始化。
Spring根据不同的scope策略创建bean,如singleton、prototype等。类型转换是后续步骤,可能将返回的bean转换为所需的类型。FactoryBean的使用提供了灵活的实例化逻辑,用户自定义创建bean的过程。
当bean为FactoryBean时,getBean()方法代理了FactoryBean的getObject(),允许通过不同的方式配置bean。缓存中获取单例时,会执行循环依赖检测和性能优化。最后,通过ObjectFactory实例singletonFactory定义bean的完整加载逻辑,包括回调方法用于处理单例创建前后的状态。