
基础源码学习
文章平均质量分 93
spring springmvc springboot mybatis 等 基础项目使用的源码分析
天黑请闭眼丶风
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
springBoot 源码五:springboot启动源码补充和配置优先级
上一篇分析了springboot的启动流程,其中还有一些部分没有分析完全。接下来通过一下方面进行分析。原创 2022-09-07 18:58:48 · 1197 阅读 · 1 评论 -
springBoot 源码四:springboot启动流程源码分析
这一步就开始解析配置类,也就是解析@SpringBootApplication注解,扫描我们定义bean,解析扫描到的bean,加载到spring容器中。这些步骤就和spring启动流程是一样,spring怎么扫描的,怎么解析的,这里就是一样的。这一步会发送两个事件,最终会把spring容器准备完成。注意这个阶段只是spring容器准备好,并没有进行扫描和解析,也就是说此时的spring容器中没有我们定义的bean。MyApplication.class等价于spring的配置类,启动的时候会解析这个类。原创 2022-09-07 10:43:23 · 479 阅读 · 0 评论 -
springBoot 源码三:Starter机制和springboot整合tomcat
springboot整合tomcat的过程中,首先通过依赖导入了tomcat的相关依赖。通过自动配置类,加载EmbeddedTomcat,也就是加载了TomcatServletWebServerFactory。通过TomcatServletWebServerFactory的getWebServer方法启动tomcat。原创 2022-09-05 11:14:26 · 1285 阅读 · 0 评论 -
springBoot 源码二:各种条件注解解析
对于springboot各种条件注解,首先获取的条件注解中@Conditional的值。调用其抽象父类SpringBootCondition的matches方法。该方法中通过方法将结果封装成ConditionOutcome。同时是抽象方法,具体实现在子类。如果matches方法返回true表示可以加载,返回false表示不需要加载。在自动配置过程中,从MATE-INF/spring.factories获取到自动配置类和过滤器filter。在过滤的过程中调用了的match方法。该方法中。原创 2022-09-01 18:36:12 · 1886 阅读 · 0 评论 -
springBoot 源码一:自动配置底层源码分析
本次springboot源码来自2.6.6版本。原创 2022-09-01 13:53:59 · 549 阅读 · 0 评论 -
spring5.3 十四:spring AOP源码分析
上一篇分析过spring 通过ProxyFactory来创建代理对象。下面来分析下ProxyFactory的原理上一篇aop的介绍中有提到这两行代码关键是getProxy方法。决定好通过那个方式进行代理后,真正调getProxy()方法由下面两个实现类这里通过jdk的动态代理为例子这个类就是jdk动态代理源码。这个方法就是放回一个代理对象,不做过多分析。jdk动态代理中,执行代理逻辑和目标方法是通过方法整个方法的大致流程是:过滤掉equal()、hashcode()这两个方法,这两个方法执行不触原创 2022-08-16 09:08:37 · 279 阅读 · 0 评论 -
spring5.3 十三:spring AOP分析
AOP的实现离不来动态代理。代理模式的解释:为其他对象提供一种代理以控制对这个对象的访问,增强一个类中的某个方法,对程序进行扩展。动态代理实现方式一般有两种cglib和jdk的动态代理上面是通过cglib来实现的代理对象的创建,是基于父子类的,被代理类(BookService)是父类,代理类是子类,代理对象就是代理类的实例对象,代理类是由cglib创建的,对于程序员来说不用关心。......原创 2022-08-10 15:32:56 · 529 阅读 · 0 评论 -
spring5.3 十二:spring配置类解析源码解析
一:在启动Spring时,需要传入一个配置类,例如上面传入AppConfig.class。ApplicationContext会根据AppConfig类封装为一个BeanDefinition,这种BeanDefinition我们把它称为配置类BeanDefinition。二:ConfigurationClassPostProcessor中会把配置类BeanDefinition取出来。......原创 2022-08-05 16:04:16 · 443 阅读 · 0 评论 -
spring5.3 十一:spring启动过程源码分析
以AnnotationConfigApplicationContext为例子。一:在调用AnnotationConfigApplicationContext的构造方法之前,会调用父类GenericApplicationContext的无参构造方法,会构造一个BeanFactory,为DefaultListableBeanFactory。原创 2022-08-03 09:06:58 · 939 阅读 · 0 评论 -
spring5.3 十:推断构造方法源码分析
Spring中的一个bean,需要实例化得到一个对象时需要用到构造方法。一般情况下,一个类只有一个构造方法要么是无参的构造方法,要么是有参的构造方法。如果只有一个无参的构造方法,那么实例化就只能使用这个构造方法了。如果只有一个有参的构造方法,那么实例化时用这个构造方法的入参类型去找BeanFactory有没有符合的参数,没有的话会报错。如果有多个构造方法呢?这就要分两种情况。那么如何解决上述的错误呢,或者有多个构造方法我想指定使用哪个怎么做呢?...原创 2022-08-01 18:01:10 · 539 阅读 · 0 评论 -
spring5.3 九:循环依赖底层分析
二级缓存(earlySingletonObjects)缓存未经过完整生命周期的bean,在循环依赖过程中,二级缓存的是三级缓存中的lambda表达式的结果,该表达式返回的是原始对象,那么就缓存原始对象,如果返回代理对象那么就缓存代理对象。这是难点,基于上面的场景想一个问题如果A的原始对象注入给B的属性之后,A的原始对象进行了AOP产生了一个代理对象,此时就会出现,对于A而言,它的Bean对象其实应该是AOP之后的代理对象,而B的a属性对应的并不是AOP之后的代理对象,这就产生了冲突。...原创 2022-07-25 23:08:51 · 310 阅读 · 0 评论 -
spring5.3 八:依赖注入源码分析下
先根据spring的自动注入就是@Bean(autowire=Autowire,BY_TYPE)进行判断。这个方法已经过期,一般不会触发这个判断,可以忽略。在BeanDefinition后置处理的时候开始找注入点,对于被@Autowired、@Value、@Inject、@Resource注解标记的方法或属性属性填充阶段开始属性注入,找出之前缓存的注入点,处理@Value、再处理@Autowired。...原创 2022-07-25 11:41:56 · 227 阅读 · 0 评论 -
spring5.3 七:依赖注入源码分析中
依赖注入底层原理流程图。原创 2022-07-21 16:32:20 · 228 阅读 · 0 评论 -
spring5.3 六:依赖注入源码分析上
方法找到那些属性是需要自动注入的,说白了就是找set方法,set后面的名称就是属性名称,遍历所有找到的名称通过getBean方法获取对应的bean然后放入到RootBeanDefinition。autowireByType也类似,找到所有需要自动注入的属性名称后在找到对应的类型,然后根据类型找到对应的bean放入到RootBeanDefinition中。到此依赖注入部分就分析完了,但是如何根据属性找到具体的bean和如何根据方法找到对应的参数下篇在分析。第一个是给属性赋值的,第二个是给方法赋值的。...原创 2022-07-21 09:39:55 · 276 阅读 · 0 评论 -
spring5.3 五:Bean的生命周期源码解析下
bean在创建过程中经历以下步骤生成BeanDefinition合并BeanDefinition加载类实例化前实例化BeanDefinition的后置处理实例化后自动注入和处理属性执行Aware回调初始化前初始化初始化后记录所有定义了销毁逻辑的beanbean销毁的步骤首先发布ContextClosedEvent事件调用lifecycleProcessor的onCloese()方法销毁单例Bean。...原创 2022-07-18 14:04:20 · 251 阅读 · 0 评论 -
spring5.3 四:Bean的生命周期源码解析中
上述代码大致流程就是,首先根据传进来的name做处理获取到beanName,根据beanName从单例池中获取,如果获取到判断是不是FactoryBean,然后出对应处理。在Spring中,实例化对象之前,Spring提供了一个扩展点,允许用户来控制是否在某个或某些Bean实例化之前做一些启动动作。可以在这个步骤中,对Bean最终进行处理,Spring中的AOP就是基于初始化后实现的,初始化后返回的对象才是最终的Bean对象。的处理,该方法包含了实例化,实例化后,属性赋值,初始化前后等过程。......原创 2022-07-15 16:40:50 · 409 阅读 · 0 评论 -
spring5.3 三:Bean的生命周期源码解析上
Spring最重要的功能就是帮助程序员创建对象(也就是IOC),而启动Spring就是为创建Bean对象做准备,所以我们先明白Spring到底是怎么去创建Bean的,也就是先弄明白Bean的生命周期。Bean的生命周期就是指:在Spring中,一个Bean是如何生成的,如何销毁的。Bean生命周期流程图:https://www.processon.com/view/link/5f8588c87d9c0806f27358c1根据上面流程图,要想生成bean,首先要生成对应的BeanDefinition扫描原创 2022-07-11 14:56:35 · 342 阅读 · 0 评论 -
spring源码学习二
spring源码学习二spring重要类学习本次学习spring源码中一些重要的类和概念,对后续源码学习很有帮助BeanDefinitionBeanDefinition是一个借口表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean性质。比如class :表示bean的类型scope:表示bean作用域,单例或者原型lazyint:表示懒加载。。。。。等等在spring中经常我们通过,@Bean,@controller等方式创建bean,这些称为声明式定义be原创 2021-09-14 09:16:35 · 172 阅读 · 0 评论 -
spring5源码学习(一)
spring 5.3 源码学习(一)spring核心原理学习注:该文章均不涉及spring的源码,从spring原理方面进行理解,在后续文章会展示spring的源码spring解析在以前学习spring的会经常使用到ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");通过ClassPathXmlApplicationContext加载spring的配置文件,现在这个类已原创 2021-09-07 19:23:33 · 475 阅读 · 0 评论