![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
springIOC
讨论springIOC的调试源码过程
一杯可乐、
专注于java后端和linux运维领域
展开
-
15.spring源码解析-invokeBeanFactoryPostProcessors
核心思想就是使用BeanFactory的getBeanNamesForType方法获取相应的BeanDefinition的name数组,之后逐一调用getBean方法获取到bean(初始化),getBean方法后面再说。注意:此时尚未进行bean的初始化工作,初始化是在后面的finishBeanFactoryInitialization进行的,所以在BeanFactoryPostProcessor对象中获取bean会导致提前初始化。原创 2023-11-28 13:16:06 · 594 阅读 · 0 评论 -
16.spirng源码解析-registerBeanPostProcessors
此部分实质上是在BeanDefinitions中寻找BeanPostProcessor,之后调用BeanFactory.addBeanPostProcessor方法保存在一个List中,注意添加时仍然有优先级的概念,优先级高的在前面。注册拦截bean创建的bean处理器。原创 2023-11-28 13:17:27 · 368 阅读 · 0 评论 -
14.spring源码解析-postProcessBeanFactory
此方法允许子类在所有的bean尚未初始化之前注册BeanPostProcessor。空实现且没有子类覆盖。原创 2023-11-27 15:10:15 · 322 阅读 · 0 评论 -
13.Spring源码解析-prepareBeanFactory
点进去此处是 Spel表达式设置。原创 2023-11-27 15:07:01 · 994 阅读 · 0 评论 -
12.Spring源码解析-其它标签解析
resolve中调用了其init方法,此方法用以向NamespaceHandler对象注册BeanDefinitionParser对象。容易看出,Spring其实使用了一个Map了保存其映射关系,key就是命名空间的uri,value是。原创 2023-11-26 13:06:18 · 355 阅读 · 0 评论 -
11.Spring源码解析-beans解析
很明显又调用回来了,是典型的递归调用。原创 2023-11-26 13:04:54 · 364 阅读 · 0 评论 -
10.Spring源码解析-GenericBeanDefinition
可见bean注册时对该实现类属性的赋值。原创 2023-11-26 13:03:04 · 305 阅读 · 0 评论 -
9.Spring源码解析-bean注册
一个是Map,另一个是List,一目了然。registerAlias方法的实现在其父类SimpleAliasRegistry,就是把键值对放在了一个ConcurrentHashMap里。委托给BeanDefinitionHolder。获取bean名称,并进行去注册。至此bean注册过程解析完毕。缓存中获取空之行下一步。原创 2023-11-25 17:08:59 · 430 阅读 · 0 评论 -
8.Spring源码解析-parseBeanDefinitionElement bean解析
value和ref属性不能同时出现,如果是ref,那么将其值保存在不可变的RuntimeBeanReference对象中,其实现了BeanReference接口,此接口只有一个getBeanName方法。首先获取到bean的class属性和parent属性,配置了parent之后,当前bean会继承父bean的属性。此标签用于替换bean里面的特定的方法实现,替换者必须实现Spring的MethodReplacer接口,有点像aop的意思。数据保存在Set中,对应的类是MethodOverrides。原创 2023-11-25 17:08:22 · 906 阅读 · 0 评论 -
7.Spring源码解析-parseBeanDefinitions解析beanDefinitions
默认解析的命名空间由parseDefaultElement方法去处理,即import, alias, bean, 嵌套的beans四种元素。原创 2023-11-24 12:41:14 · 541 阅读 · 0 评论 -
6.Spring源码解析-loadBeanDefinitions(String location)
上图131行判断是不是默认的命名空间即:http://www.springframework.org/schema/beans。xmlns属性就是xml规范定义的用来设置命名空间的。这样设置了之后其实里面的bean元素全名就相当于。解析beandefinitions和后处理xml后续继续说。委托给Document并加载Document类。获取资源组可能存在多个bean.xml。获取当前正在加载的资源发现是空。创建了一个字节输入流,继续解析。预处理xml,点进去发现是空。创建一个编码资源并解析。原创 2023-11-24 12:40:36 · 703 阅读 · 0 评论 -
5.Spring源码解析-loadBeanDefinitions(String... locations)
循环加载每个xml文件。原创 2023-11-23 13:10:03 · 28 阅读 · 0 评论 -
4.Spring源码解析-loadBeanDefinitions(XmlBeanDefinitionReader)
总结:该loadBeanDefinitions是XmlBeanDefinitionReader设置xml文件在哪。这里在这里已经给属性设置了值,所以肯定不是空能拿到。肯定走的第二个逻辑了。原创 2023-11-23 13:08:27 · 344 阅读 · 0 评论 -
3.Spring源码解析-loadBeanDefinitions
以上loadBeanDefinitions方法其实就是干了将beanFactory委托给XmlBeanDefinitionReader。然后初始化一下子beanDefinitionReader。初始化beanDefinitionReader。加载beanDefinitionReader。然后往下看初始化的内容。原创 2023-11-23 13:07:34 · 34 阅读 · 0 评论 -
2.Spring源码解析-AbstractApplicationContext—obtainFreshBeanFactory()
子类**AbstractRefreshableApplicationContext。**存在bean工厂销毁bean和关闭bean工厂。总结:此方法其实就是创建bean工厂然后,通过创建好的bean工厂去加载beandefinition。告诉子类刷新内部工厂。原创 2023-11-22 21:57:10 · 24 阅读 · 0 评论 -
1.Spring源码解析-ClassPathXmlApplicationContext
此类是读取spring的xml配置文件并解析。设置默认的应用上下文父级的值,很明显是空。原创 2023-11-22 13:29:55 · 461 阅读 · 0 评论