【spring简易流程分析】

spring简易流程分析

// appconfig类
@ComponentScan("com.zhq")
public class AppConfig {
}
//启动类
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(AppConfig.class);
context.addBeanFactoryPostProcessor(new CarBeanFactory());
context.refresh();

1.注册了几个BeanDefinition;
internalConfigurationAnnotationProcessor: RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);
internalAutowiredAnnotationProcessor: RootBeanDefinition def = new RootBeanDefinition(AutowiredAnnotationBeanPostProcessor.class);
internalCommonAnnotationProcessor: RootBeanDefinition def = new RootBeanDefinition(CommonAnnotationBeanPostProcessor.class);
internalPersistenceAnnotationProcessor: PersistenceAnnotationBeanPostProcessor
internalEventListenerProcessor: RootBeanDefinition def = new RootBeanDefinition(EventListenerMethodProcessor.class);
internalEventListenerFactory: RootBeanDefinition def = new RootBeanDefinition(DefaultEventListenerFactory.class);

2.注册AppConfig,添加到BeanDefinition中
DefaultListableBeanFactory:
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
private volatile List beanDefinitionNames = new ArrayList<>(256);

3.添加BeanPostProcessor
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));
beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));

4.扫描已经注册所有的BeanDefinition
扫描BeanDefinitionRegistryPostProcessor类型的BeanDefinition
继承这个类的进行排序PriorityOrdered、Ordered、普通
并且执行postProcessBeanDefinitionRegistry方法。
1)首先执行的是ConfigurationClassPostProcessor.class中的方法。
2)把符合(类上有@Configuration注解,或者只要存在@Component、@ComponentScan、@Import、@ImportResource四个中的一个,在或者方法上存在@Bean的)条件的BeanDefinition都会解析成配置类。
3)然后会对这写配置类进行解析,并注册成BeanDefinition。

** 解析:拿到扫描路径之后,执行ClassPathBeanDefinitionScanner中的doScan方法。将所有符合条件的类注册成为Beandefinition **

5.实例化非懒加载的单例Bean
1)遍历所有beanDefinitionNames
2)创建单例Bean
3)遍历所有单例Bean,如果继承SmartInitializingSingleton接口,执行afterSingletonsInstantiated()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值