Spring源码
2023-05-24 16:08:13 3 举报
spring源码
作者其他创作
大纲/内容
AspectJAfterReturningAdvice
完整的Bean对象
Supplier
InitDestroyAnnotationBeanPostProcessor注解解析
引用类型
注册到BeanDefinitionMap中
context.getBean()
DefaultTransactionStatus
找到了A对象
给对象属性设置值
populate
BeanPostProcessor:after
获取Aop标签解析器
实例化
new RuntimeBeanReference((String) pointcut)
System.getProperties();
BeanFatoryPostProcessor
将Resource解析为Document
BeanDefinition加载
AspectJAfterAdvice
AspectJAfterThrowingAdvice
SimpleBeanFactoryAwareAspectInstanceFactory
populateBean属性填充
返回Doucment对象作为参数解析
创建Bean工厂
AbstractBeanDefinitionReader.loadBeanDefinitions(String[]configs)
spring bean
注入方式
configureAutoProxyCreator
key:dataSourceValue:connectionHolder
只实例化但未完成初始化的对象
解析注解属性
普通对象进行AOP解析
REQUIRED
CommonAnnotationBeanPostProcessor注解解析
isInfrastructureClass
con.setAutoCommit(false)
singleton
add
BeanDefinitionReader定义资源文件读取并转换为BeanDefinition的各个功能
prototypey
执行调用init-method
二级缓存
session
createBeanInstance
Spring Bean
@PostConstruct
执行init-method
类型
根据xml配置文件的autowire来觉得是byName还是byType注入
DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions
给属性赋上默认值
doCreateBean
定制化
增强BeanDefinition信息
判断当前参数的类型:1.RuntimeBeanReference2.RuntimeBeanNameReference3.BeanDefinitionHolder4.BeanDefinition......
创建B对象
doBegin
true
创建XmlReaderContext
执行BeAfterBeanPostProcessor
A初始化开始属性赋值
autowireConstructor
通过FactoryBean创建的Bean会在首次创建的时候放入FactoryBeanRegistrySupport.factoryBeanObjectCache中去
读取文件
执行初始化方法
成品对象
key:beanNamevalue:Object
newTransactionStatus
初始化和循环依赖
@Resource
xml
发现Mybatis-Plus中的Mapper都是由FactoryBean创建。
实例化B对象
DefaultDocumentLoader
分类
REQUIREDNEW
request
parseAdvice解析
DataSourceTransactionObject
注册BeanDefinition
BeanPostProcessor
判断是否存在带参构造方法
获取需要被注入的属性进行创建
注册BeanPostProcessor
AspectJAroundAdvice
B 对象属性A
半成品缓存Map
XmlBeanDefinitionReader.loadBeanDefinitions(Resource resource)
BeanClassLoaderAware
AOP在此处进行增强
BeanDefinition
bpp:after
BeanNameAware
执行BeanFactoryPostProcessor
BeanDefinitionReader
从容器中获取AdviseBean
执行after的初始化方法
FactoryBean
scope
Spring 重要接口概述
提前暴露
执行调用Aware接口对应的方法
反射
XmlBeanDefinitionReader
创建A对象
跳转到子类
普通对象
applyBeanPostProcessorsBeforeInstantiation
Bean定义信息
resolveBeforeInstantiation
解析出当前Bean的带参构造函数
实现InstantiationAwareBeanPostProcessor接口
NEVER
FactoryMethod
prepareRefresh();
属性填充
InstantiationAwareBeanPostProcessors下的实现
StandardEnvironment
从容器中获取A对象
SUPPORTS
完成实例化但未完成初始化的对象
直接注入
初始化
解析出Bean中被Resource,PostConstruct标记的方法和属性
填充属性populateBean
setSavepointAllowed
接口
Connection
解决循环依赖
1.普通不需要代理的对象2.需要代理的对象
init-method
B初始化开始属性赋值
AspectJAwareAdvisorAutoProxyCreator.shouldSkip
TransactionManager
FactoryBean接口的三个方法
XmlBeanDefinitionReader.loadBeanDefinitions(String[]configs)
加载BeanDefinition
getBean->doGetBean->createBean->doCreateBean
值类型
设置aware接口的属性
返回A对象填充到B的属性内
NOTSUPPORTS
key:beanNamevalue:lambda
NESTED
创建对象
事务传播
getAdviceClass
new EncodedResource(resource)
标记lookup-method
解析被注解修饰的字段及方法
实例化Bean
执行before的初始化方法
BeanPostProcessor:before
创建BeanFactory-SimpleBeanFactoryAwareAspectInstanceFactory
成品缓存Map
Aop标签解析
setConnectionHolder
initializeBean
bean初始化
@PreDestroy
shouldSkip
在Bean实例化之后
填充属性
getTransaction
找到了B对象
Spring创建Bean对象的集中方式
System.getEnv();
Aware
BeanFactoryAware
我们自定义需要的对象
bindResource
是否被该接口实现类进行实例化InstantiationAwareBeanPostProcessor
A 对象属性B
AbstractBeanDefinitionReader
是否存在Factory-Method属性
String[]->string->Resource[]->resource->document->element
创建adviceDefcreateAdviceDefinition
postProcessor
实例化A对象
org.springframework.aop.aspectj.AspectJPointcutAdvisor#0
createBeanDefinitionDocumentReader()
将AspectJAwareAdvisorAutoProxyCreator对象注册到BeanDefinitionMap中
AbstractAutoProxyCreator.postProcessBeforeInstantiation
支持外层事务
都会导致Bean提前实例化
返回B对象填充到A的属性内
后置处理器增强器
执行刷新Bean工厂时忽略的Aware接口invokeAwareMethods
properties
代理对象
1.按照排序执行BeanDefinitionRegistry下的实现类2.执行BeanFactoryPostProcessor
startTransaction
AspectJMethodBeforeAdvice
beanReferences
个人理解:public class AFactoryBean implements FactoryBean{public A getObject() throws Exception{ return new A();}....... 伪代码}如果在context.getBean(\"aFactoryBean\
BeanFactory和FactoryBean的区别
三级缓存
调用执行用户自定义初始化方法init-method
getBean
advisorDefinitionnew RootBeanDefinition(AspectJPointcutAdvisor.class);
不注入
BeanFactory
解析默认标签
将标签名称包装为RuntimeBeanReference对象
开始Bean初始化finishBeanFactoryInitialization
doGetBean
createBean
XmlBeanDefinitionReader.loadBeanDefinitions(EncodedResource encodedResource)
构造器
实现了initializeBean接口之后调用afterPropertiesSet方法
创建MethodDefinition
从容器查找B对象
aspectComponentDefinition
AspectJPointcutAdvisor
AbstractAspectJAdvice
Environment
AbstractBeanDefinitionReader.loadBeanDefinitions(Resource... resources)
BeanDefinitionRegistry
半成品对象
内置对象,Spring需要的对象
refresh
TransactionAttribute
名称
GenericBeanDefinition
一级缓存
容器对象
执行BeforeBeanPostProcessor
在jvm的堆内开辟空间
生成代理缓存对象Map
findCandidateAdvisors
设置属性值
TransactionDefinition
解析自定义标签
增强Bean信息
根据对象中定义的@Autowire属性进行解析注入
yml
不支持外层事务
MethodLocatingFactoryBean
BeanFactoryPostProcessor
0 条评论
下一页