AnnotatedBeanDefinitionReader
2022-04-17 18:11:06 0 举报
AI智能生成
登录查看完整内容
spring的注解源码解析1
作者其他创作
大纲/内容
https://blog.csdn.net/xiaojie_570/article/details/104570199
参考链接起点
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
代码触发点
ConfigurationAnnotationProcessor是工厂后置处理器
注册【ConfigurationAnnotationProcessor】类型的Bean
处理@Autowired的Bean后置处理器
注册【AutowiredAnnotationBeanPostProcessor】
处理@Required的Bean后置处理器
注册【RequiredAnnotationBeanPostProcessor】
检查是否支持JSR-250。处理一些公共注解的Bean后置处理器,可以处理@PostConstruct、@PreDestroy和@Resource
注册【CommonAnnotationBeanPostProcessor】
只有pom中导入了spring-orm后才会注册这个类型的Bean后置处理器
注册【EventListenerMethodProcessor】
注册【DefaultEventListenerFactory】
首先初始化Spring的7个内置Bean后置处理器,并放到 DefaultListableBeanFactory 类型的对 象 beanFactory 中
this.reader = new AnnotatedBeanDefinitionReader(this);
创建Spring的注解解析器 Component
this.scanner = new ClassPathBeanDefinitionScanner(this);
this();
在执行完register(annotatedClasses);方法后,我们传入的配置类信息就会保存到Spring容器的beanFactory中
register(annotatedClasses)
容器刷新前的预处理工作,初始化一些属性的设置:context、验证一些属性信息
prepareRefresh();
获取一个新的beanFactory(经过this()和register()处理的beanFactory),并给beanFactory设置Id。obtainFreshBeanFactory()返回的beanFactory类型是DefaultListableBeanFactory,ConfigurableListableBeanFactory 是DefaultListableBeanFactory的接口
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
对beanFactory进行一些设置:设置类加载器、支持表达式解析器、添加BeanPostProcessor等
prepareBeanFactory(beanFactory);
BeanFactory准备工作完成后进行的后置处理工作子类(比如web的ApplicationContext)通过重写这个方法来再BeanFactory创建并预准备完成后做进一步的设置,默认为空方法。.
postProcessBeanFactory(beanFactory);
解析@Configuration、@Component,@ComponentScan,@Import,@ImportResource等注解,将@Configuration注解对应的类注册到beanFactory中
invokeBeanFactoryPostProcessors(beanFactory);
注册beanFactory中扩展了BeanPostProcessor的bean.
AutowiredAnnotationBeanPostProcessor(处理被@Autowired注解修饰的bean并注入)
RequiredAnnotationBeanPostProcessor(处理被@Required注解修饰的方法)
CommonAnnotationBeanPostProcessor(处理@PreDestroy、@PostConstruct、@Resource等多个注解的作用)等。
registerBeanPostProcessors(beanFactory);
初始化MessageSource组件(做消息绑定、消息解析)
initMessageSource();
初始化事件派发器.
initApplicationEventMulticaster();
在容器刷新的时候可以自定义逻辑(子类自己去实现逻辑).
onRefresh();
给容器中所有项目里面的ApplicationListener 注册进来
registerListeners();
初始化所有剩下的非懒加载的单实例Bean
实例化的过程各种BeanPostProcessor开始起作用
finishBeanFactoryInitialization(beanFactory);
清除上下文资源缓存,发布ContextRefreshedEvent事件告知对应的ApplicationListener进行响应的操作
finishRefresh();
refresh()
源码解析
AnnotatedBeanDefinitionReader 解析
0 条评论
回复 删除
下一页