spingIOC加载流程
2021-01-28 18:23:54 0 举报
spingIOC加载流程
作者其他创作
大纲/内容
构造函数中初始化创建了DefaultListableBeanFactory()
把这个解析配置文件的后置处理器注册成bean定义,非常的重要
设置bean工厂的类加载器为当前application应用的类加载器
this();
refresh();
注册了bean工厂的内部的bean对象
把传入的配置类注册成bean定义
注册解析JSR规范注解的后置处理器的bean定义
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));
this.registry = registry;
spingIOC加载流程
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
设置忽略接口,因为这些接口都有setXX的方法,在populateBean属性注入时不会执行这些方法进行属性注入
AnnotationConfigApplicationContext(Class<?>... annotatedClasses)
ConfigurationClassPostProcessor.class
RequiredAnnotationBeanPostProcessor.class
beanFactory = new DefaultListableBeanFactory();
EventListenerMethodProcessor.class
注册一个order排序其,因为相同类型的后置处理器执行的顺序不一样
把容器对象传入读取器
注册处理监听方法的@EventListener注解的解析器
注册处理@Required注解的后置处理器bean定义
prepareBeanFactory(beanFactory);
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE);
定义一个扫描器,但是这个扫描器不是在加载容器中用的,而是在容器加载完成后,后续手动调用指定容器的
注册容器内置的后置器,非常重要,创实际的类的bean定义就在此处注册成bean定义的
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
beanFactory.ignoreDependencyInterface(EnvironmentAware.class);\t\tbeanFactory.ignoreDependencyInterface(EmbeddedValueResolverAware.class);\t\tbeanFactory.ignoreDependencyInterface(ResourceLoaderAware.class);\t\tbeanFactory.ignoreDependencyInterface(ApplicationEventPublisherAware.class);\t\tbeanFactory.ignoreDependencyInterface(MessageSourceAware.class);\t\tbeanFactory.ignoreDependencyInterface(ApplicationContextAware.class);
为bean工厂设置属性资源编辑器对象,用于后面属性赋值使用
设置一个后置处理器,用来处理ApplicationContextAware接口的回调方法
定义一个bean定义读取器,这一步非常重要,初始化了创世纪的类
DefaultEventListenerFactory.class
准备刷新上下文环境,比如给容器设置一下启动标识
注册处理@Autowired注解的后置处理器的bean定义
AutowiredAnnotationBeanPostProcessor.class
注解版容器上下文,参数为配置类;在创建对象时,在其有参构造函数中主要做了一下三件事
if (beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {\t\t\tbeanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));\t\t\t// Set a temporary ClassLoader for type matching.\t\t\tbeanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));\t\t}
注册一个事件监听器探测器后置处理器对象
获取容器工厂,有xml和注解版的工程,注解版的工厂在此处只是刷新容器,给容器对象赋值唯一的id
prepareRefresh()
设置@Autowire注解的候选的解析器
为bean工厂设置SPEL解析器
注册处理JPA注解的后置处理器的bean定义
beanFactory.setBeanClassLoader(getClassLoader());
注册事件监听器工厂的bean定义
把特殊的对象单独添加到容器中的一个单独map中,这些类不需要注册到单例缓存池中就可以使用,比如在任何容器中对象注入这些对象
初始化一个处理@Conditional的对象
register(Class<?>... annotatedClasses) {
beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));
PersistenceAnnotationBeanPostProcessor.class
对Bean工厂进行属性填充
AnnotatedBeanDefinitionReader(BeanDefinitionRegistry registry)
beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());
注册处理aspectj的后置处理器对象
GenericApplicationContext()
ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry)
CommonAnnotationBeanPostProcessor.class
收藏
0 条评论
回复 删除
下一页