Spring源码
文章平均质量分 80
超级码农0912
这个作者很懒,什么都没留下…
展开
-
Spring是如何加载BeanDefinition的
在Spring加载Bean的过程中是无法感知每个Bean的,也无法知道每一个bean具体的特征,比如某个bean是单例还是原型,是否懒加载等等。所以Spring需要beandefinition来对每个不同的bean进行描述,并不是直接把Bean直接存入容器而是读取成beanDefinition,再根据BeanDefenition对bean的描述进行实例化。那么Spring是如何读取这些BeanDefinition的呢?原创 2023-02-23 18:01:05 · 464 阅读 · 1 评论 -
从源码角度解决mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
看了网上很多解决方法发现并不全,大部分都是检查namespace和标签id是否正确以及是否和方法名对应。首先要说一下报错中的这个statement 就是mappedstatement,在mybatis中一个mappedstatement对应一个或者是其他标签,是一对一的关系。如果检查了namespace和xml配置发现都没问题,就可以怀疑是自己的mapper文件并没有被扫描到。下面是我的排错思路:...原创 2022-06-10 23:51:29 · 317 阅读 · 0 评论 -
Spring源码:refresh方法解析
前言在Spring中,refresh方法就是整个框架的核心,也是阅读源码的最合适的入口。这个方法包括了整个Spring的执行流程和bean的完整生命周期。首先从new ClassPathXmlApplicationContext(“xxx.xml”)开始。 public ClassPathXmlApplicationContext( String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)原创 2022-03-19 16:12:58 · 2692 阅读 · 2 评论 -
Spring源码:Bean的初始化
前言Spring中Bean的实例化和初始化都是在doCreateBean中实现的。实例化操作是在createBeanInstance(beanName, mbd, args)方法中实现的。在实例化后会生成一个BeanWrapper对象,这个对象是bean的修饰对象。而进行bean初始化的功能主要是在**populateBean(beanName, mbd, instanceWrapper)**和 **initializeBean(beanName, exposedObject, mbd)**中完成的。po原创 2022-03-17 21:01:10 · 743 阅读 · 0 评论 -
Spring源码:populateBean方法填充属性(autowireByName、autowireByType详解)
前言Spring框架在doCreateBean方法中进行普通Bean的实例化和初始化。在doCreateBean中调用createBeanInstance()方法创建bean的实例后,会进行一次后置处理器的调用。 // 对bean进行合并后处理,Autowired注解就是通过这个方法实现类型的预解析 synchronized (mbd.postProcessingLock) { if (!mbd.postProcessed) { try { applyMergedBeanD原创 2022-03-16 22:18:54 · 1531 阅读 · 0 评论 -
Spring源码:Bean的加载流程
1.前置知识Spring通过IO流读取到xml文件后,由BeanDefinitionReader的实现类XmlBeanDefinitionReader对xml文件进行解析。将xml文件中的信息传入BeanDefinitionDocumentReader的实现类DefaultBeanDefinitionDocumentReader转换成Document对象,从beans标签开始一步一步像剥洋葱一样解析各级标签。最终封装在BeanDefinition中。BeanDefinition在通过BeanFactory原创 2022-03-13 15:41:13 · 1874 阅读 · 0 评论 -
Spring源码解析:三级缓存与循环依赖
循环依赖Spring的循环依赖指的是两个或以上的bean对象互相作为对方的属性,例如A类中存在属性B,B类中存在属性A。Spring在创建实例化A时发现需要注入B类,就先去创建B类,在创建B类时发现需要注入A类,这时候又去寻找A类。这就是循环依赖,如下图:如果按照Spring普通的方式去进行实例化,是不可避免循环依赖的。我们从源码开始,一步一步分析Spring是如何解决循环依赖的。首先是从获取bean开始。我们从doGetBean方法开始进入,注意这个getSingleton(beanName),顾名原创 2022-03-15 17:00:06 · 574 阅读 · 0 评论