Spring整体流程及重点类
2024-09-14 17:17:40 0 举报
Spring是一个轻量级、非侵入式的开源框架,用于简化企业级应用程序的开发。其核心流程如下: 1. 初始化Spring容器:通过加载XML或Java配置类来初始化Spring容器,该容器是Spring应用的核心,负责管理Bean的生命周期和依赖关系。 2. 扫描和注册Bean:Spring容器通过扫描指定的包或类,自动识别并注册符合条件的Bean,这些Bean将用于处理业务逻辑和持久化等任务。 3. 依赖注入:Spring容器根据配置文件或注解,将依赖项注入到相应的Bean中,完成Bean间的依赖关系。 4. Bean初始化和销毁:容器初始化完成后,会调用Bean的初始化方法进行初始化,并在容器关闭时调用Bean的销毁方法。 重点类包括: 1. ApplicationContext:Spring容器的核心接口,提供Bean的创建、获取、销毁等功能。 2. BeanFactory:Spring容器的基础接口,定义了Bean的创建、获取等基本操作。 3. ResourceLoader:资源加载接口,用于加载XML或Java配置类等资源。 4. BeanDefinition:Bean的基本数据结构,封装了Bean的配置信息。 5. BeanNameGenerator:用于生成Bean的名称。 6. DefaultListableBeanFactory:默认的Spring容器实现类,实现了Bean的创建、获取、销毁等操作。
作者其他创作
大纲/内容
设置属性populate
一级缓存 用于保存BeanName和创建Bean实例之间的关系singletonObjects
FactoryBean
ImportSelector
ConversionService
在实例化之前,要把所有的基础的beanDefinition对象转换成RootBeanDefinition对象,进行缓存,后续在需要马上要实例化的时候,直接获取定义信息,定义信息如果包含了父类,那么必须要先创建父类才能有子类,父类如果没有的话,子类怎么创建?
BeanPostProcessor:before
重要接口
AnnotatedBeanDefinition存储@Configuration注解注释的类
CreateBean
MergedBeanDefintionPostProcessor
DefaultListableBeanFactory
goGetBean
抽象接口定义解析文件的行为定义规范方便扩展BeanDefinitionReader
存储容器BeanDefinitionNames: beanNameBeanDefinitionMap:key:beanName value:beanDefinition
实例化
BeanDefinitionRegistryPostProcessor
Xml
三级缓存 用于保存BeanName和创建bean工厂之间的关系singletonFactories
ioc
BeanFactoryPostPorcessor
postProcessBeanDefinitionRegistry()
BeanDefinition
PlaceholderResolver替换参数${}
ScannedGenericBeanDefinition存储@Component、@Service、@Controller等注解注释的类
getBean
导入外部信息的接口
BeanPostProcessor
getSpringFactoriesLoaderFactoryClass()
设置aware接口属性
AbstractBeanDefinition
完整的bean对象
System.getProperties()
@Import({AutoConfigurationImportSelector.class})
isSingleton
初始化
BeanDefinitionRegistry
类型转换服务
BeanDefinitionReader
ConfigurationClassBeanDefinition
BeanFactory
ConfigurationClassPostProcessor
AutoConfigurationGroup.process()
InstantiationAwareBeanPostProcessor
注解解析:自动装配 @Import
createBeanInstance
getAutoConfigurationEntry()
ConverterA converter converts a source object of type S to a target of type T. Implementations of this interface are thread-safe and can be shared.
BeanFactory与FactoryBean的区别
BeanPostProcessor:After
System.getEnv()
doCreateBean
两者都是用来创建Bean对象的使用BeanFactory创建对象,必须遵守Spring规定的完整的创建流程,创建过程由Spring进行管理(会经历create,docreate,实例化,初始化、beanPostProcessor处理、invokeAwareMethod、invokeInitMethod、before、after等流程)而使用FactoryBean只需要调用getObject()就可以返回具体的对象,整个对象的创建过程由用户自己控制,更加灵活(不需要经历spring规定的完整的创建流程)、factoryBean创建了两个对象,一个是factoryBean对象本身,一个是getObject()方法里面的对象;两个对象都是Spring管理,但是存放对象的缓存集合不同,实现了factoryBean接口的对象在一级缓存,但是调用getObject方法获取的对象在factoryBeanObjectCache;如果不是单例对象的话,那么需要每次调用的时候重新创建,缓存中不会保存当前对象
Aware
StandardEnviroment
GenericBeanDefinion
parse()
各种配置文件类型
三级缓存
getObject()
json
主要处理Spring中的注解;@ComponentScan、@Import、@ImportSource、@Bean、@PropertySource
DestructionAwareBeanPostProcessor
processConfigBeanDefinitions()
BeanFactoryPostProcessor
getObjectType
populateBean
执行init-method方法
ApplicationContextClassPathXmlApplication、FileSystemXmlApplication、XmlWebApplicationContext
instantiateBean
getCandidateConfigurations()
Properties
@EnableAutoConfiguration
instantiate
二级缓存 保存BeanName和创建bean实例之间的关系,与singletonFactories的不同之处在于,当一个单例Bean被放到这里之后,那么当bean还在创建过程中 就可以通过getBean方法获取到,可以方便进行循环依赖的检测earlySingletonObjects
RootBeanDefinition
AutoConfigurationImportSelector
GenericConverterGeneric converter interface for converting between two or more types.
BeanFactory容器的跟接口,获取容器中bean的入口使用反射创建bean
Enviroment
SmartInstantiationAwareBeanPostProcessor
Yml
ConverterFactoryA factory for \"ranged\" converters that can convert objects from S to subtypes of R.
0 条评论
回复 删除
下一页