Spring整体流程及重点类
2024-10-16 17:49:02 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
populateBean
执行after初始化方法
ImportSelector
ConversionService
1:FactoryBean;getObject
doGetBean
创建AspectJPointAdvisor
method
实例化
AutowiredAnnotationBeanPostProcessor处理@Autowire、@ValueAutowiredFieldElementAutowiredMethodElement
AspectJAfterAdvice
Cglib
applyBeanPostProcessorsAfterInitialization
三级缓存 用于保存BeanName和创建bean工厂之间的关系singletonFactories
InitDestroyAnnotationBeanPostProcessor
BeanFactoryPostPorcessor
postProcessBeanDefinitionRegistry()
处理器
PlaceholderResolver替换参数${}
JDK
ScannedGenericBeanDefinition存储@Component、@Service、@Controller等注解注释的类
getBean
BeanPostProcessor
getSpringFactoriesLoaderFactoryClass()
设置aware接口属性
ApplicationContextAwareProcessor
完整的bean对象
System.getProperties()
@Import({AutoConfigurationImportSelector.class})
创建需要从右往左递归创建,必须先把右边的对象创建成功
isSingleton
有相似之处
applyPropertyValues:根据property标签定义的属性值,完成各种属性的解析和赋值工作
类型转换服务
BeanDefinitionReader
ConfigurationClassBeanDefinition
ConfigurationClassPostProcessor
invokeAwareMethods
AutoConfigurationGroup.process()
PropertyDescriptor
initializeBean
切点
BeanFactory
System.getEnv()
doCreateBean
RuntimeBeanReference
两者都是用来创建Bean对象的使用BeanFactory创建对象,必须遵守Spring规定的完整的创建流程,创建过程由Spring进行管理(会经历create,docreate,实例化,初始化、beanPostProcessor处理、invokeAwareMethod、invokeInitMethod、before、after等流程)而使用FactoryBean只需要调用getObject()就可以返回具体的对象,整个对象的创建过程由用户自己控制,更加灵活(不需要经历spring规定的完整的创建流程)、factoryBean创建了两个对象,一个是factoryBean对象本身,一个是getObject()方法里面的对象;两个对象都是Spring管理,但是存放对象的缓存集合不同,实现了factoryBean接口的对象在一级缓存,但是调用getObject方法获取的对象在factoryBeanObjectCache;如果不是单例对象的话,那么需要每次调用的时候重新创建,缓存中不会保存当前对象
GenericBeanDefinion
三级缓存
BeanDefinition读取从左到右
SimpleBeanFactoryAwareAspectInstanceFactory2 工厂对象
getObject()
表达式1
主要处理Spring中的注解;@ComponentScan、@Import、@ImportSource、@Bean、@PropertySource
MethodLocatingFactoryBeanindex 0 method,增强的方法
DestructionAwareBeanPostProcessor
processConfigBeanDefinitions()
ApplicationContextClassPathXmlApplication、FileSystemXmlApplication、XmlWebApplicationContext
导入外部信息的接口
BeanFactoryAware
AspectJPointcutAdvisor#1
MethodMatcher
对对象进行增删改查的一些操作
Resolver
执行调用init-method
二级缓存 保存BeanName和创建bean实例之间的关系,与singletonFactories的不同之处在于,当一个单例Bean被放到这里之后,那么当bean还在创建过程中 就可以通过getBean方法获取到,可以方便进行循环依赖的检测earlySingletonObjects
RootBeanDefinition
MethodLocatingFactoryBeanindex 0
BeanFactory容器的跟接口,获取容器中bean的入口使用反射创建bean
Advisoradvice 通知
Enviroment
SmartInstantiationAwareBeanPostProcessor
aop面向切面编程
pointcut
ConverterFactoryA factory for \"ranged\" converters that can convert objects from S to subtypes of R.
执行before初始化方法postProcessBeforeInitialization
instantiate
实例化完成,还未初始化的对象
一级缓存 用于保存BeanName和创建Bean实例之间的关系singletonObjects
FactoryBean
factory
AOP
在实例化之前,要把所有的基础的beanDefinition对象转换成RootBeanDefinition对象,进行缓存,后续在需要马上要实例化的时候,直接获取定义信息,定义信息如果包含了父类,那么必须要先创建父类才能有子类,父类如果没有的话,子类怎么创建?
AspectJAroundAdvice
BeanPostProcessor:before
重要接口
AopConfigUtilsinternalAutoProxyCreator
AnnotatedBeanDefinition存储@Configuration注解注释的类
CreateBean
MergedBeanDefintionPostProcessor
DefaultListableBeanFactory
抽象接口定义解析文件的行为定义规范方便扩展BeanDefinitionReader
实现了initialzingBean接口之后调用afterPropertiesSet方法
存储容器BeanDefinitionNames: beanNameBeanDefinitionMap:key:beanName value:beanDefinition
调用执行用户自定义初始化方法init-method
AspectJMethodBeforeAdvice
BeanDefinitionRegistryPostProcessor
Xml
初始化
applyBeanPostProcessorsBeforeInitialization
TypeConverter
ioc
BeanDefinition
AspectJPointcutAdvisor
执行调用Aware接口方法
CommonAnnotationBeanPostProcessor@PostConstruce @PreDestory
AspectJPointcutAdvisor#0
AbstractBeanDefinition
切面
创建Advisor需要先创建Advice
AspectJAwareAdvisorAutoProxyCreator
静态工厂
AspectJExpressionPointcut1 表达式 切点
SimpleBeanFactoryAwareAspectInstanceFactory2
Aware
BeanDefinitionRegistry
创建bean的几种方式
BeanReference
InstantiationAwareBeanPostProcessor通过before方法创建代理对象
处理xml中配置的autowire=‘byType’ 或者 autowire=‘byName’
注解解析:自动装配 @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
AnnotationAwareAspectJAutoProxyCreator
AspectJAfterThrowingAdvice
首先读取配置文件到BeanDefinition,之后一步一步的来进行创建对象
StandardEnviroment
5:doCreateBean;反射创建对象
parse()
各种配置文件类型
Advice
CommonAnnotationBeanPostProcessor处理@PostConstruce @PreDestory@Resource
json
BeanFactoryPostProcessor
2:BeanPostProcessorInstantiatationAwareBeanPostProcessor
getObjectType
AbstractAutoProxyCreatorAOP
执行init-method方法
AbstractAutoProxyCreator
getCandidateConfigurations()
AspectJAfterReturningAdvice
Properties
注入一些属性值
@EnableAutoConfiguration
3:通过supplier创建对象
BeanClassLoaderAware
4:factoryMethod属性
Registry
AutoConfigurationImportSelector
GenericConverterGeneric converter interface for converting between two or more types.
InjectionMetadata解析注解信息
完整的实例对象以及代理对象
Support
postProcessPropertyValues 方法 //AutowireAnnotationBeanPostProcessor 处理 @Autowire @Value注解
invokeInitMethods
BeanNameAware
Yml
实例工厂
0 条评论
下一页