Spring 源码解析 - xml解析封装BeanDefinition(1)
- XML 解析封装BeanDefinition
断点在 DefaultListableBeanFacy, registerBeanDefinition()
二 如果给属性赋值
三 各种postprocessor
## 2、Spring套路点
- 1、AbstractBeanDefinition 看看何时给容器中注入了什么组件
- 2、BeanFactory让初始化完,监控里面多了哪些后置处理器
- 3、分析后置处理器什么时候调用,做了什么功能
> 以上所有的前提,理解**容器刷新12大步**与**getBean流程**,防止混乱
>
> 1、工厂后置处理器执行
>
> 2、bean后置处理器执行&bean的生命周期(后置处理器+InitializingBean)
1、这个新功能一般都是由 **bean的生命周期**机制增强出来的;
2、这个功能加入了哪些组件,这些组件在生命周期期间做了什么?
--------------------------------------------IOC--------------------------------------------
GenericApplicationContext {
private final DefaultListableBeanFactory beanFactory;
}
defaultListableBeanfactory beanFactory {
private final Map<String, BeanDefinition> beanDefinitionMap ;
private volatile List<String> beanDefinitionNames;
}
AbstractBeanFactory {
BeanFactory parentBeanFactory
List<BeanPostProcessor> beanPostProcessors
static class BeanPostProcessorCache {
final List<InstantiationAwareBeanPostProcessor> instantiationAware = new ArrayList<>);
final List<SmartinstantiationAwareBeanPostProcessor> smartinstantiationAware = new ArrayList<>)
final List<Destruction Aware BeanPost rocessor> destructionAware = new ArrayList<>);
final List<MergedBeanDefinitionPostProcessor> mergedDefinition = new ArrayList<>);
}
}
DefaultSingletonBeanRegistry{
singletonObject earlySingletonObject singletonFactory
Set<String>singletonsCurrentlyinCreation 1/ 保存的是正在创建对象的 kev
BeanDefinitionregister {
registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
AbstractApplicationContext{
private ApplicationContext parent;
private final Set<ApplicationListener<?>> applicationListeners = new LinkedHashSet<>();
private ApplicationEventMulticaster applicationEventMulticaster;
private final List<BeanFactoryPostProcessor> beanFactoryPostProcessors
-----------------------aop ---------------------------
AbstractAdvisorAutoProxyCreator {
private BeanFactoryAdvisorRetrievalHelper advisorRetrievalHelper;
private final Map<Object, Boolean> advisedBeans
}
AnnotationAwareAspectJAutoProxyCreator{
private AspectJAdvisorFactory aspectJAdvisorFactory ->
ReflectiveAspectJAdvisorFactory {
private final BeanFactory beanFactory;
}
private BeanFactoryAspectJAdvisorsBuilder aspectJAdvisorsBuilder{
// 存放所有切面类的beanname
private volatile List<String> aspectBeanNames;
// list 存放的是切面方法
private final Map<String, List<Advisor>> advisorsCache = new ConcurrentHashMap<>();
}
}
---------------------------springboot 源码分析-------------------------------------
SpringApplication {
private Set<Class<?>> primarySources;
private List<ApplicationContextInitializer<?>> initializers; // 从spring.factory 获取的
private List<ApplicationListener<?>> listeners;
}
SpringApplicationRunListeners{
private final List<SpringApplicationRunListener> listeners; -> org.springframework.boot.context.event.EventPublishingRunListener
}
public interface DeferredImportSelector extends ImportSelector {
public interface Group {
}
AutoConfigurationImportSelector {
private final List<AutoConfigurationEntry> autoConfigurationEntries = new ArrayList();
private static class AutoConfigurationGroup implements DeferredImportSelector.Group{
private final DeferredImportSelector.Group group;
public void process(AnnotationMetadata annotationMetadata, DeferredImportSelector deferredImportSelector)
}
}
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
@springbootapplication
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义