
Spring
一颗小陨石
除非我不想赢,不然没人能让我输
展开
-
【SpringBoot】ConditionXX的作用与原理以及自定义Condition
在前面一文中,我们讲了SpringBoot启动的几个阶段和自动装配的原理,我们会发现,在Spring中,使用了大量的@ConditionXXX注解,本文就来介绍下@Condition注解的原理。问题:ConditionXX注解是做什么的?如何使用?如何自定义Condition?Condition实现原理是什么?一、@ConditionXXX注解的作用常见的一些@Condition相关的注解如上。该类注解的作用就是在满足某个条件的时候才将某个类进行实例化并加入到Spring容器中来。如:原创 2020-08-29 20:09:29 · 964 阅读 · 0 评论 -
SpringBoot启动和自动装配那点事儿
文章目录SpringBoot启动时做了什么?一、SpringApplication构造【准备】1.1 服务启动类型判断1.2 加载应用上下文初始器 ApplicationContextInitializer1.2.1 SPI服务加载1.2.2 实例化实现类1.3 加载应用事件监听器ApplicationListener1.4 获取启动类二、SpringApplication运行2.1 加载SpringApplicationRunListener2.2 封装启动参数2.3 加载外部化配置2.4 创建上下文对象原创 2020-08-29 16:24:36 · 743 阅读 · 0 评论 -
SpringMVC流程总结、源码详解
文章目录一、doDispatch1.1 getHandler1.1.1 根据请求对象拿到HandlerMethod1.1.2 getHandlerExecutionChaingetHandler总结1.2 getHandlerAdapter1.3 执行prehandle1.4 调用Controller业务方法1.4.1 调用方法和返回值处理1.4.1.1 调用方法:获取参数数组:解析参数值res...原创 2020-04-17 18:35:31 · 750 阅读 · 2 评论 -
SpringMVC纯注解配置+原理详解【请求流程预备点】
SpringMVC系列这里都基于纯注解的方式。而要实现纯注解,就是要替代原本的web.xml和springmvc.xml两个配置文件的内容。一、替代web.xml1.1 spring配置不扫描Controller类@ComponentScan(value = "com.wml",excludeFilters = { @ComponentScan.Filter(type = ...原创 2020-04-17 18:33:22 · 1035 阅读 · 0 评论 -
Spring对事务的管理源码级详解
文章目录从@EnableTransactionManagement开启事务讲起创建事务切面一、事务调用1.1 创建事务1.1.1 开启事务1.1.1.1创建事务对象获取数据源和连接对象1.1.1.2事务已经存在挂起当前事务1.1.1.3 第一次不存在事务开启事务doBegin1.2事务回滚事务提交回滚的几个问题【重要】嵌套事务的问题1.3 事务提交释放资源二、注解事务和编程式事务附1:事务的传播属...原创 2020-04-15 17:54:26 · 257 阅读 · 0 评论 -
Spring的AOP调用流程源码分析~
这里我们只对基于注解的AOP进行讲解。首先定义一个类用于扫描包:@Service@ComponentScan(basePackages = {"com.test"})public class EnableComponentScan {}然后创建一个类开启AOP的注解扫描:这也是Springboot开启AOP的方式。@Service@EnableAspectJAutoProxy...原创 2020-04-11 17:33:03 · 766 阅读 · 0 评论 -
bean实例化流程源码详解【包括循环依赖问题的解决和原理】
文章目录一、invokeBeanFactoryPostProcessors二、registerBeanPostProcessors三、finishBeanFactoryInitialization3.1 具体进行实例化3.2 doGetBean3.2.1 getSingleton从缓存拿实例【解决循环依赖】3.2.2 单例实例化3.2.2.1 getSingletonA.createBeanB. ...原创 2020-04-09 18:18:14 · 443 阅读 · 0 评论 -
Spring容器初始化机制详解及流程图
文章目录Spring容器加载的方式Spring容器的初始化机制1.refresh()2.obtainFreshBeanFactory():3.loadBeanDefinitions()doLoadBeanDefinitions():4.registerBeanDefinitions()doRegisterBeanDefinitions5.parseBeanDefinitions()5.1parse...原创 2020-04-05 23:13:04 · 1622 阅读 · 0 评论