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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 




































 

posted @ 2023-04-05 16:32  周无极  阅读(18)  评论(0编辑  收藏  举报