Spring
文章平均质量分 94
流烟默
这个作者很懒,什么都没留下…
展开
-
SpringBoot中事务执行原理分析(六)
接上文[SpringBoot中事务执行原理分析(五)](https://blog.csdn.net/J080624/article/details/78264800)后,本文我们分析一下事务处理过程中的事务同步管理器`TransactionSynchronizationManager`与事务同步`SqlSessionSynchronization`。# 【1】事务同步管理器这里指的是TransactionSynchronizationManager。管理每个线程的资源和事务同步的中央委托。通常用于原创 2017-09-10 18:13:36 · 2386 阅读 · 0 评论 -
SpringBoot中事务执行原理分析补充篇
本文是对[SpringBoot中事务执行原理分析(一)](https://janus.blog.csdn.net/article/details/54603669)的补充说明,我们详细分析一下如何判断Advisor与我们的service是否匹配。在前文中我们提到了**BeanFactoryTransactionAttributeSourceAdvisor**,其包含了Advice用于对我们的service进行增强实现事务效果。```csharppublic class BeanFactoryTra原创 2016-11-17 15:50:09 · 837 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(五)
接上文[SpringBoot中事务执行原理分析(四)](https://blog.csdn.net/J080624/article/details/52786286)我们分析过方法正常执行完事务提交后,本文我们继续分析目标方法抛出异常后事务的回滚流程,即 `completeTransactionAfterThrowing(txInfo, ex)`。**TransactionAspectSupport的completeTransactionAfterThrowing方法如下。**```javaprot原创 2017-10-17 18:58:06 · 1215 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(四)
接上文[SpringBoot中事务执行原理分析(三)](https://blog.csdn.net/J080624/article/details/52785544)我们分析过事务信息对象的获取后,本文我们继续分析目标方法执行后事务的提交流程,即 `commitTransactionAfterReturning(txInfo);`。如下所示TransactionAspectSupport的事务提交动作交给了事务管理器来处理。```java// org.springframework.transact原创 2016-10-11 11:10:13 · 1805 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(三)
接上文[SpringBoot中事务执行原理分析(二)](https://janus.blog.csdn.net/article/details/53202138)后,本文我们分析事务执行流程中的`获取事务对象 - createTransactionIfNecessary` 。也就是分析TransactionAspectSupport的invokeWithinTransaction方法中下面这行代码。```java//TransactionAspectSupportTransactionInfo原创 2016-10-11 10:06:24 · 1016 阅读 · 0 评论 -
你认真研究过Spring中的@EnableTransactionManagement注解吗?
# 【1】基本功能简单来讲, `@EnableTransactionManagement`注解就是在SpringBoot环境(或者JavaConfig)下开启事务管理。与`` xml配置类似用来注入Spring支持注解驱动的事务管理行为时必须的组件,比如TransactionInterceptor。比如JavaConfig下应用如下:```java@Configuration@EnableTransactionManagementpublic cl............原创 2017-09-10 11:46:19 · 5426 阅读 · 0 评论 -
Spring中那些BeanFactoryPostProcessors详解(二)
本文是对[Spring中refresh分析之invokeBeanFactoryPostProcessors方法详解](https://blog.csdn.net/J080624/article/details/54345467)的一个补充,我们详细说明一下那些BeanFactoryPostProcessor在invokeBeanFactoryPostProcessors方法中的作用。# 【1】PropertySourcesPlaceholderConfigurer其主要是用来解析BeanDefinit原创 2017-10-17 18:29:04 · 907 阅读 · 0 评论 -
Spring中那些BeanFactoryPostProcessors详解(一)
本文是对[Spring中refresh分析之invokeBeanFactoryPostProcessors方法详解](https://blog.csdn.net/J080624/article/details/54345467)的一个补充,我们详细说明一下那些BeanFactoryPostProcessor在invokeBeanFactoryPostProcessors方法中的作用。# 【1】CachingMetadataReaderFactoryPostProcessor`CachingMetad原创 2016-09-22 16:57:16 · 2219 阅读 · 0 评论 -
Spring中如何获取到一个Bean实例(二)?
本文作为[Spring中如何获取到一个Bean实例(一)?](https://blog.csdn.net/J080624/article/details/53213290)的姊妹篇,我们 对获取bean实例的流程做一些补充说明。# 【1】主动获取方式除了在项目启动过程中,refresh方法过程中spring会自动实例化单例bean并解析bean依赖之外,我们通常可能使用如下两种方式主动获取bean,触发bean实例化过程。如下所示,分别是根据bean class type以及beanName来获取原创 2016-09-28 15:22:30 · 1432 阅读 · 0 评论 -
SpringBoot中是如何创建WebServer的?
本文这里环境是springboot 2.2.4.RELEASE。创建WebServer是在refresh方法的onRefresh方法中实现的。其也是refresh方法体系的一个重要步骤。ServletWebServerApplicationContext的onRefresh方法。如下所示其首先调用父类的onRefresh方法初始化ThemeSource,然后调用createWebServer创建WebServer。```java@Overrideprotected void onRefresh()原创 2016-12-27 14:53:15 · 11685 阅读 · 2 评论 -
Spring中refresh分析之prepareRefresh方法详解
关联博文:AbstractApplicationContext中refresh方法详解Spring中refresh分析之obtainFreshBeanFactory方法详解Spring中refresh分析之prepareBeanFactory方法详解Spring中refresh分析之postProcessBeanFactory方法详解Spring中refresh分析之invokeBeanFactoryPostProcessors方法详解Spring中refresh分析之registerBeanP原创 2017-05-24 22:16:02 · 8694 阅读 · 0 评论 -
Spring中refresh分析之finishRefresh方法详解
接上文[Spring中refresh分析之finishBeanFactoryInitialization方法详解](https://blog.csdn.net/J080624/article/details/76813056)我们分析过finishBeanFactoryInitialization后,本文分析finishRefresh方法。**ServletWebServerApplicationContext的finishRefresh方法**```java@Overrideprotected原创 2017-05-16 09:15:43 · 12876 阅读 · 3 评论 -
Spring中refresh分析之finishBeanFactoryInitialization方法详解
接上文[Spring中refresh分析之registerListeners方法详解](https://blog.csdn.net/J080624/article/details/76823915)我们分析过registerListeners后,本文分析finishBeanFactoryInitialization方法。该方法其将会拿到所有的beanDefinitionNames,遍历beanNames,其非抽象、是单例、未配置lazy_init属性或其值非true那么就会触发getBean的操作;遍.原创 2017-08-07 10:16:28 · 1566 阅读 · 0 评论 -
Spring中refresh分析之registerListeners方法详解
接上文[Spring中refresh分析之onRefresh方法详解](https://janus.blog.csdn.net/article/details/72830824)我们分析过onRefresh后,本文分析registerListeners方法。顾名思义,注册监听器。```javaprotected void registerListeners() { // Register statically specified listeners first. for (Applicati.原创 2017-08-07 11:05:02 · 1340 阅读 · 0 评论 -
Spring中refresh分析之onRefresh方法详解
接上文[Spring中refresh分析之initApplicationEventMulticaster方法详解](https://blog.csdn.net/J080624/article/details/72832401)我们分析过initApplicationEventMulticaster后,本文分析onRefresh方法。首先调用父类的方法初始化主题源(themeSource)然后创建WebServer。SpringBoot内置的Tomcat或者UndertowWebServer就是在这里实.原创 2017-06-01 14:17:39 · 5412 阅读 · 0 评论 -
Spring中refresh分析之initApplicationEventMulticaster方法详解
接上文[Spring中refresh分析之initMessageSource方法详解](https://blog.csdn.net/J080624/article/details/52966007)我们分析过initMessageSource后,本文分析initApplicationEventMulticaster方法。方法如下所示,初始化ApplicationEventMulticaster。如果应用上下文环境中没有定义,则使用SimpleApplicationEventMulticaster 。.原创 2017-06-01 16:16:59 · 5357 阅读 · 0 评论 -
Spring中refresh分析之initMessageSource方法详解
接上文[Spring中refresh分析之registerBeanPostProcessors方法详解](https://blog.csdn.net/J080624/article/details/52987756)我们分析过registerBeanPostProcessors后,本文分析initMessageSource方法。**AbstractApplicationContext的initMessageSource方法如下所示。**```javaprotected void initMess.原创 2016-10-29 18:59:31 · 1052 阅读 · 0 评论 -
Spring中refresh分析之registerBeanPostProcessors方法详解
接上文[Spring中refresh分析之invokeBeanFactoryPostProcessors方法详解](https://blog.csdn.net/J080624/article/details/54345467)我们分析过invokeBeanFactoryPostProcessors后,本文分析registerBeanPostProcessors方法。顾名思义,即在bean实例化前注册并实例化所有的BeanPostProcessor,如果给定了order,则遵循其顺序。```javap原创 2016-10-31 22:19:39 · 1404 阅读 · 0 评论 -
Spring中refresh分析之postProcessBeanFactory方法详解
接上文[Spring中refresh分析之prepareBeanFactory方法详解](https://blog.csdn.net/J080624/article/details/53286740)我们分析过prepareBeanFactory方法后,本文分析postProcessBeanFactory方法。`AnnotationConfigServletWebServerApplicationContext`的`postProcessBeanFactory`方法。```java@Overrid原创 2016-11-06 12:33:40 · 1872 阅读 · 0 评论 -
Spring中refresh分析之prepareBeanFactory方法详解
接上文[Spring中refresh分析之obtainFreshBeanFactory方法详解](https://blog.csdn.net/J080624/article/details/53257129)我们分析过obtainFreshBeanFactory方法后,本文分析prepareBeanFactory方法。该方法主要是对beanFactory做了一些基础设置的配置,比如BeanClassLoader、BeanExpressionResolver等等。**AbstractApplicat原创 2016-11-22 15:35:15 · 1491 阅读 · 0 评论 -
Spring中refresh分析之obtainFreshBeanFactory方法详解
关联博文:AbstractApplicationContext中refresh方法详解接上文AbstractApplicationContext中refresh方法详解我们分析过prepareRefresh后,本文分析obtainFreshBeanFactory方法。该方法主要是获取到应用上下文维护的beanFactory,默认是DefaultListableBeanFactory 。① refreshBeanFactory的方法。其首先应用CAS思想设置刷新标志,然后为beanFactory设置序列原创 2016-11-21 10:46:33 · 1955 阅读 · 0 评论 -
Spring中如何获取到一个Bean实例(一)?
其实这里想要说的是Spring容器中getBean的原理,也就是当你想从容器中获取到一个Bean时,Spring都做了什么?如下所示,本文我们以常见的controller实例化过程为例进行分析。【1】doGetBeanAbstractBeanFactory的doGetBean方法是获取到Bean实例的地方,但却不是创建、设置属性、解析依赖及后置处理的地方。这句话比较拗口,这个方法可以认为返回的是一个“处理”后的bean实例,但是其中一些环境比如设置属性、依赖解析是在更深层的的方法进行处理的。......原创 2016-11-18 10:21:18 · 1823 阅读 · 0 评论 -
Spring中@Autowired与@Resource自动注入实现原理
从autowiring使用上可以知道,这个autowiring属性在对Bean属性进行依赖注入时起作用。而这是在populateBean中实现的。也就是说,对属性autowiring的处理是populateBean的一部分。在前面我们分析[Spring中Bean实例化过程中的populateBean方法](https://blog.csdn.net/J080624/article/details/53326237)可以看到自动注入的解析出现在两个部分。**第一部分:**```javaint res原创 2016-11-23 22:22:58 · 1099 阅读 · 0 评论 -
Spring后置处理器中的InstantiationAwareBeanPostProcessor详解
其是BeanPostProcessor的子接口,增加了before-instantiation回调,以及在bean实例化后但是确切属性设置/autowire注入发生前增加了postProcessAfterInstantiation回调。通常用于抑制特定目标bean的默认实例化,例如创建具有特殊TargetSources的代理(池目标、延迟初始化目标等),或实现其他注入策略,如字段注入。接口源码我们看一下接口源码与方法说明。如下所示接口的四个方法均有默认实现。postProcessBeforeInstant原创 2016-12-02 09:35:40 · 3391 阅读 · 0 评论 -
Spring中Bean实例化过程中的populateBean方法
这是bean实例化后非常重要的一个环节。用bean定义中的属性值填充给定BeanWrapper中的bean实例,也就是属性赋值过程。这里会涉及到成员的依赖注入解析过程,也会涉及到循环依赖。如下所示,在`populateBean(beanName, mbd, instanceWrapper);`方法执行前我们的fileController实例:```java// 如下是我们定义的成员private static final Logger logger= LoggerFactory.getLogg原创 2016-11-24 21:20:20 · 906 阅读 · 0 评论 -
Spring中Bean实例化过程中的initializeBean方法
populateBean方法执行后,就开始执行initializeBean方法了。在这之前前面已经完成了Bean的属性设置、依赖注入,这里属于bean初始化过程的后置部分。给用户提供一个入口,实现其他特性。方法源码如下所示:如上代码所示,这里主要核心有四个步骤:invokeAwareMethods、applyBeanPostProcessorsBeforeInitialization、invokeInitMethods以及applyBeanPostProcessorsAfterInitialization原创 2017-04-17 16:02:06 · 5137 阅读 · 0 评论 -
数据库事务特性、传播行为和隔离级别总结
# **【1】 事务的四个关键属性(ACID)****原子性(atomicity):** 事务是一个原子操作, 由一系列动作组成。事务的原子性确保动作要么全部完成要么完全不起作用。原子性强调事务的不可分割。**一致性(consistency):** 事务的执行的前后数据的完整性保持一致。一旦所有事务动作完成, 事务就被提交。数据和资源就处于一种满足业务规则的一致性状态中。**隔离性(isolation):** 一个事务执行的过程中,不应该受到其他事务的干扰。可能有许多事务会同时处理相同的数据,原创 2016-11-29 17:25:37 · 3272 阅读 · 0 评论 -
Spring AOP拦截器调用的实现
在Spring AOP通过jdk的proxy方式或者CGLIB方式生成代理对象的时候,相关的拦截器已经配置到代理对象中去了,拦截器在代理对象中起作用是通过对这些方法的回调来完成的。如果使用jdk的proxy来生成代理对象,那么需要通过InvocationHandler来设置拦截器回调。而如果使用CGLIB来生成代理对象,就需要根据CGLIB的使用要求,提供过DynamicAdvisedInterceptor来完成回调。# 【1】JdkDynamicAopProxy的invoke拦截JdkDynam原创 2017-01-18 14:32:00 · 1429 阅读 · 0 评论 -
Spring AOP如何为目标方法创建拦截器链?
在Spring AOP中代理对象增强通知执行原理一文中我们提到了为目标方法进行增强分析了其执行流程。本文我们详细研究一下拦截器链的产生。拦截器链的产生是由DefaultAdvisorChainFactory 类完成的,该类如下所示。..................原创 2017-01-18 09:48:25 · 24319 阅读 · 2 评论 -
Spring AOP中CGLIB代理对象增强通知执行原理
**前置博文:**[Spring AOP中如何为Bean创建代理?](https://blog.csdn.net/J080624/article/details/83444209)[Spring AOP中是如何注册Advisor的?](https://janus.blog.csdn.net/article/details/87894643)或者换句话说,当我们定义了切面、pointcut以及advice后,这些是如何对我们的目标对象生效的。继续结合前面博文分析,我们从代码角度解读其执行流程。假设原创 2017-02-10 17:38:20 · 15290 阅读 · 0 评论 -
Spring中那些BeanPostProcessor在Bean实例化过程中的作用
在Bean实例化过程中,会分别遍历执行其和方法。方法如下所示。那么BeanPostProcessor有哪些?分别又起了什么作用呢?我们下面看一下。BeanPostProcessorbefore方法after方法ApplicationContextAwareProcessor为、、、、及设置信息没有实现,默认返回beanWebApplicationContextServletContextAwareProcessor父类ServletContextAwareProcess原创 2017-03-28 10:13:53 · 2540 阅读 · 0 评论 -
IOC容器初始化过程中单例Bean的预实例化
在容器的refresh方法中我们可以看到finishBeanFactoryInitialization方法,该方法就是实例化所有非懒加载实例![在这里插入图片描述](https://img-blog.csdnimg.cn/2ef69b46ca234789afae30476f546451.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b06d25f96aac4597b1510be24b0bdca8.png)## ① finishBeanFactoryIniti原创 2017-05-27 13:35:53 · 7612 阅读 · 0 评论 -
[读书笔记]IOC容器的依赖注入详解
[[读书笔记]Spring中IOC容器中FileSystemXmlApplicationContext的初始化详解](https://blog.csdn.net/J080624/article/details/53156502)[[读书笔记]FileSystemXmlApplicationContext容器初始化之BeanDefinition的载入和解析](https://blog.csdn.net/J080624/article/details/52789924)前面我们对IOC容器的初始化过程进行原创 2017-10-17 18:45:01 · 9604 阅读 · 0 评论 -
[读书笔记]FileSystemXmlApplicationContext容器初始化之BeanDefinition的载入和解析
前面[[读书笔记]Spring中IOC容器中FileSystemXmlApplicationContext的初始化详解](https://blog.csdn.net/J080624/article/details/53156502)我们以FileSystemXmlApplicationContext为例,讲解了其Resource定位的问题解决方案,即以FileSystem方式存在的Resource的定位实现。这里我们继续学习BeanDefinition的载入和解析。# 【1】BeanDefinition原创 2016-10-11 17:21:58 · 2284 阅读 · 0 评论 -
Spring AOP中private(踩坑)实践总结
# 【1】方法修饰符为private的坑如往常一样使用spring aop进行日志记录。定了了日志切面后,兴冲冲加上注解`@EnableAspectJAutoProxy(proxyTargetClass=true)`,发起请求,这时候一个猝不及防的空指针闪了我一下。![在这里插入图片描述](https://img-blog.csdnimg.cn/ef5db8d53506449ba3f138987e311c12.png?x-oss-process=image/watermark,type_d3F5LXpl原创 2017-04-06 21:18:11 · 13040 阅读 · 2 评论 -
[读书笔记]AbstractApplicationContext中refresh方法详解
Spring IoC容器对Bean定义资源的载入是从refresh()函数开始的,refresh()是一个模板方法,refresh()方法的作用是:在创建IoC容器前,如果已经有容器存在,则需要把已有的容器销毁和关闭,以保证在refresh之后使用的是新建立起来的IoC容器。refresh的作用类似于对IoC容器的重启,在新建立好的容器中对容器进行初始化,对Bean定义资源进行载入FileSystemXmlApplicationContext通过调用其父类AbstractApplicationContex原创 2016-12-27 09:56:02 · 11219 阅读 · 2 评论 -
[读书笔记]Spring中IOC容器中FileSystemXmlApplicationContext的初始化详解
接上文[[读书笔记]Spring中IOC容器中XmlBeanFactory的初始化详解](https://janus.blog.csdn.net/article/details/53196003),我们这里尝试看一下FileSystemXmlApplicationContext这种ApplicationContext的初始化。FileSystemXmlApplicationContext是独立的 XML application context,从文件系统或URL得到上下文定义文件。URL可以是绝对或者相原创 2016-11-14 10:36:25 · 4321 阅读 · 0 评论 -
[读书笔记]Spring中IOC容器中XmlBeanFactory的初始化详解
IoC容器的初始化包括`BeanDefinition`的Resource定位、载入和注册这三个基本的过程。从[[读书笔记]Spring中的容器设计](https://janus.blog.csdn.net/article/details/87886221)一文可知IOC容器主要有两个体现:基础功能的BeanFactory如XmlBeanFactory以及提供了高级功能的ApplicationContext,如以前SSM环境下场景的XmlWebApplicationContext与ClasspathXmlAp原创 2016-11-17 09:48:57 · 2475 阅读 · 0 评论 -
[读书笔记]Spring中的循环依赖详解
什么是循环依赖?循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错。那么Spring是如何解决循环依赖的?# 【1】Spring循环依赖的三种方式## ① 构造器参数循环依赖Spring容器会将每一个正在创建的Bean 标识符放在一个“当前创建Bean池”中,Bean标识符在创建过程中将一直保持在这个池中,因此如果在创建Bean过程中发现自己已经在“当前创建Bean池”里时将抛出`BeanCurrentl原创 2016-12-27 14:06:40 · 4884 阅读 · 0 评论 -
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
# 【1】BeanFactoryBeanFactory 是 Spring 的“心脏”。它就是 Spring IoC 容器的真面目。Spring 使用 BeanFactory 来实例化、配置和管理 Bean。BeanFactory:是IOC容器的核心接口, 它定义了IOC的基本功能,我们看到它主要定义了getBean方法。getBean方法是IOC容器获取bean对象和引发依赖注入的起点。方法的功能是返回特定的名称的Bean。BeanFactory 是初始化 Bean 和调用它们生命周期方法的“吃苦原创 2017-02-16 18:21:45 · 4383 阅读 · 0 评论