spring
普通网友
这个作者很懒,什么都没留下…
展开
-
Spring IOC 注入 解决循环依赖
本文主要是分析Spring bean的循环依赖,以及Spring的解决方式。 通过这种解决方式,我们可以应用在我们实际开发项目中。什么是循环依赖?怎么检测循环依赖Spring怎么解决循环依赖Spring对于循环依赖无法解决的场景Spring解决循环依赖的方式我们能够学到什么?1. 什么是循环依赖?循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调原创 2020-06-16 23:14:11 · 326 阅读 · 0 评论 -
spring 知识点01
Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented programming,AOP)。为了降低Java开发的复杂性,Spring采取了以下4种关键策略基于POJO的轻量级和最小侵入性编程;通过依赖注入和面向接口实现松耦合;...原创 2020-03-28 22:14:19 · 56 阅读 · 0 评论 -
Spring MVC 知识点01
什么是Spring MVC?简单介绍下你对Spring MVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。Spring MVC的优点(1)可以支持各种视图技术,而不仅仅局限于JSP;(2)...原创 2020-03-26 19:05:14 · 86 阅读 · 0 评论 -
spring boot 知识点01
Spring Boot 有哪些优点?Spring Boot 主要有如下优点:容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。开箱即用,远离繁琐的配置。提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。没有代码生成,也不需要XML配置。避免大量的 Maven 导入和各种版本冲突Spring...原创 2020-04-07 22:50:03 · 69 阅读 · 0 评论 -
分布式跟踪系统学习 zipkin + Spring Cloud Sleuth
原创 2019-11-09 10:32:37 · 115 阅读 · 0 评论 -
Spring Cloud Hystrix 源码分析03 隔离策略 请求缓存 执行结果缓存
隔离是一种常见的风险控制(保护)手段,Hystrix 也使用了隔离策略,称之为bulkhead pattern,翻译为:舱壁隔离模式(舱壁将船体内部空间划分成多个舱室,将舱与舱之间严密分开,在航行中,即使有舱破损进水,水也不会流到其他舱)1. Hystrix 隔离1.1 Thread Pool 将各依赖服务的访问交由独立的线程池来处理,会为每个依赖服务创建一个线程池。...原创 2019-11-03 17:04:43 · 145 阅读 · 0 评论 -
Spring Cloud Hystrix 源码分析02 执行 信号量隔离 && 线程池隔离
HystrixCommandAspect1.根据入参连接点joinPoint获取方法method,并且校验不能为空2.校验方法method不能既使用HystrixCommand注解,同时又使用HystrixCollapser 注解3.然后获取工厂metaHolderFactory,创建出metaHolder4.然后创建出invokable5.获取执行类型executionT...原创 2019-11-03 16:34:22 · 286 阅读 · 0 评论 -
Spring Cloud Hystrix 源码分析01
代码结构如下重点实现在hystrix-core 代码依赖下图所示先看一下核心接口HystrixInvokable,是一个空接口下面是子接口HystrixInvokableInfo,定义了一些接口方法直接看其具体实现类HystrixObservableCommand和HystrixCommandHystrixCommand用在依赖服务返回单个操作结果的时候:e...原创 2019-11-03 14:55:50 · 182 阅读 · 0 评论 -
Spring Cloud Hystrix 学习笔记 概述
6.1.1 解决什么问题6.2 Hystrix 实战运用 添加@EnableHystrix 注解原创 2019-11-02 20:37:12 · 77 阅读 · 0 评论 -
Spring Cloud Ribbon 源码分析02
在restOfInit()方法上,有一个 updateListOfServers()的方法,该方法是用来获取所有的ServerList的。EurekaClient的实现类为DiscoveryClient,在之前已经分析了它具有服务注册、获取服务注册列表等的全部功能。由此可见,负载均衡器是每10秒钟从EurekaClient获取服务信息,并根据IRule去路由,并且根据IPing去判断服...原创 2019-11-02 18:58:39 · 99 阅读 · 0 评论 -
Spring Cloud Ribbon 源码分析01
ribbon 代码结构首先看核心接口ILoadBalancer分成几个核心的接口方法定义addServers(List)向负载均衡器中维护的实例列表增加服务实例chooseServer(Object)通过某种策略,从负载均衡器中挑选出一个具体的服务实例markServerDown(Server)用来通知和标识负载均衡器中某个具体实例已经停止服务,不然负载均衡...原创 2019-10-31 18:17:47 · 99 阅读 · 0 评论 -
Spring Cloud Ribbon 学习笔记
进程内负载均衡,也是客户端负载均衡必须使用@LoadBalanced注解,用于负载均衡5.2.1 Ribbon负载均衡策略与自定义配置 使用配置类,全局更改负载均衡策略源码分析下一章开始...原创 2019-10-31 18:10:21 · 108 阅读 · 0 评论 -
Spring Cloud Feign 学习01
是一种声明式、模板化的HTTP客户端4.1.2 Feign 入门案例4.2.2 Feign 修改属性配置,都是修改application.yml和application.properties等文件 包括开启gzip 压缩,支持属性文件配置,开启日志,设置超时4.3 Feign 的实战运用 4.3.1 Feign 默认 对每个地址...原创 2019-10-28 18:39:10 · 84 阅读 · 0 评论 -
Eureka 学习 源码分析10 覆盖状态
本文主要分享应用实例的覆盖状态属性。这里要注意下,不是应用实例的状态(status),而是覆盖状态(overridestatus)调用 Eureka-Server HTTP Restful 接口apps/${APP_NAME}/${INSTANCE_ID}/status对应用实例覆盖状态的变更,从而达到主动的、强制的变更应用实例状态。注意,实际不会真的修改 Eureka-...原创 2019-10-26 18:14:17 · 435 阅读 · 0 评论 -
Eureka 学习 源码分析09 client获取注册信息
Eureka-Client 获取注册信息,分成全量获取和增量获取。默认配置下,Eureka-Client 启动时,首先执行一次全量获取进行本地缓存注册信息,而后每30秒增量获取刷新本地缓存( 非“正常”情况下会是全量获取 )。调用#fetchRegistry(false)方法,从 Eureka-Server全量获取注册信息30秒增量获取注册信息,并且会刷新本地缓存2.3 ...原创 2019-10-26 17:44:25 · 176 阅读 · 0 评论 -
Eureka 学习 源码分析08 应用实例过期
2. 为什么需要过期正常情况下,应用实例下线时候会主动向 Eureka-Server 发起下线请求。但实际情况下,应用实例可能异常崩溃,又或者是网络异常等原因,导致下线请求无法被成功提交。介于这种情况,通过 Eureka-Client 心跳延长租约,配合 Eureka-Server 清理超时的租约解决上述异常循环租约leaseMap,然后判断如果如果有过期的,就加入到过期exp...原创 2019-10-26 16:42:55 · 137 阅读 · 0 评论 -
Eureka 学习 源码分析07 应用实例自我保护机制
3.1 触发条件当每分钟心跳次数(renewsLastMin)小于numberOfRenewsPerMinThreshold时,并且开启自动保护模式开关(eureka.enableSelfPreservation = true) 时,触发自动保护机制,不再自动过期租约,实现代码如下:计算公式如下:expectedNumberOfRenewsPerMin= 当前注册的应用...原创 2019-10-26 16:06:36 · 658 阅读 · 0 评论 -
Eureka 学习 源码分析06 应用实例下线
1.首先反注册statusChangeListener, 卸载监听器2.然后调用cancelSchduledTasks ,取消定时任务;包括关闭实例复制器,心跳执行器,缓存刷新执行器,定时调度器3.调用unregister()进行反注册 ,发送命令给server+++++++++++++++++++++++++++++++++++++++++++++++...原创 2019-10-26 15:53:13 · 100 阅读 · 0 评论 -
Spring Boot 源码分析07 自动配置
自动配置:是 Spring Boot 提供的,实现通过 jar 包的依赖,能够自动配置应用程序。例如说:我们引入spring-boot-starter-web之后,就自动引入了 Spring MVC 相关的 jar 包,从而自动配置 Spring MVC自动装配:是 Spring 提供的 IoC 注入方式@SpringBootApplication一、@Inherited注解...原创 2019-10-25 09:42:29 · 189 阅读 · 0 评论 -
Spring 事务 源码分析笔记04 事务回滚
调用completeTransactionAfterThrowing 进行事务回滚1.判断当前是否存在事务2.判断是否满足回滚条件3.回滚处理4.如果不满足回滚条件出现异常也会继续提交5.回滚时,事务状态不能是已完成6. 调用processRollback执行回滚7.如果有保存点,也就是当前事务为单独的线程则会退到保存点8.如果是新事务直接回滚9.如果当前事...原创 2019-09-19 21:55:41 · 162 阅读 · 0 评论 -
Spring 事务 源码分析笔记02 事务执行
执行入口为TransactionAspectSupport1.首先获取事务属性txAttr,然后根据事务属性,调用beanFactory.getBean获取事务管理器2.然后获取joinpointIdentification3.调用createTransactionIfNecessary创建事务txInfo4.当前线程是否已经存在事务,就处理已经存在的事务5.如果当前...原创 2019-09-19 21:39:36 · 99 阅读 · 0 评论 -
spring boot 2 源码分析二 启动流程01
初始化时,会加载配置文件META-INF/spring.factories文件:继续看run方法实现一、获取并启动监听器 SpringApplicationRunListeners listeners = getRunListeners(args);会继续获取Spring的工厂实例列表,如下图1. 创建工厂实例,首先根据入参的name列...原创 2019-09-10 23:33:17 · 77 阅读 · 0 评论 -
知识点复习39 Spring 01
spring中beanFactory和ApplicationContext的联系和区别总体上讲: BeanFactory是Spring中最基本、通用的工厂,这里的工厂,其不仅仅是构造实例,它可以创建并管理各种类的对象,即是Spring IOC容器体系结构的基本接口,其与其子接口便构成了Spring IOC容器的体系结构(如下图:IOC容器主要接口关系图)。所以不要把它理解成常...原创 2019-10-07 16:18:26 · 79 阅读 · 0 评论 -
知识点复习38 SpringBoot 自动配置源码分析
启动类加载核心方法load1.如果是class类型,就启用注解类型2.如果是resource类型,就使用xmlReader解析3.如果是package类型,就启用scanner对包进行扫描4.如果是字符串类型,就直接使用xmlReader进行解析5.判断source是否是一个component,如果使用component注解,代表是一个bean;就包装成为一个An...原创 2019-10-06 23:28:57 · 102 阅读 · 0 评论 -
Spring boot 2 源码分析 六 启动流程06
继续上文Spring Boot 启动流程分析6.10 在所有注册的bean中查找listener beans,注册到消息广播器中.代码如下: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++6.11this.finishBeanFactoryInitializ...原创 2019-09-12 18:54:22 · 77 阅读 · 0 评论 -
Spring boot 2 源码分析 五 启动流程05
六、refreshContext(context); 上面已经创建容器context完毕,并且把启动类等加载到了容器,现在就是调用refresh刷新容器 程序执行入口如下6.1 调用prepareRefresh进行刷新容器前的准备 6.1.1 clearCache : 清空元数据的缓存 6.1.2 调用父类prepareRefresh...原创 2019-09-12 17:08:05 · 94 阅读 · 0 评论 -
Spring boot 2 源码分析 四 启动流程04
五、准备容器 将启动类注入容器,后续开启自动化配置5.1 context.setEnvironment(environment); 给容器context设置环境,包括各种变量5.2 postProcessApplicationContext(context); 执行后置处理动作 这里默认不执行任何逻辑,因为beanNameGenerat...原创 2019-09-12 14:41:00 · 127 阅读 · 0 评论 -
Spring boot 2 源码分析 三 启动流程03
三、开始创建容器,也就是ApplicationContextcontext = createApplicationContext();创建contextClass的类型,还是根据webApplicationType进行判断的,这里为servlet类型,所以会通过反射装载字节码实例化成为ConfigurableApplicationContext,返回四、对异常报告处理这...原创 2019-09-12 12:01:35 · 80 阅读 · 0 评论 -
spring boot 2 源码分析二 启动流程02
上一篇分析了spring boot 启动时,初始化监听器,下面来看一下构造容器环境,也就是调用下面prepareEvent方法实现二、准备容器环境prepareEnvironment直接看getOrCreateEnvironment方法,获取环境environment根据类型不同,分别返回以上不同的environment2.创建好环境environment后,要对环...原创 2019-09-11 22:49:53 · 87 阅读 · 0 评论 -
Spring boot 2 深入分析invokeBeanFactoryPostProcessors
1.循环入参的beanFactoryPostProcessors,增加到bean注册的集合registryProcessors,或者regularPostProcessors2.首先执行类型为PriorityOrdered的BeanDefinitionRegistryPostProcessor,优先执行:获取bean,增加到当前的注册bean集合3.其次执行类型为Ordered的...原创 2019-09-15 21:20:56 · 273 阅读 · 0 评论 -
Spring boot 2 启动流程图
原创 2019-09-15 19:34:36 · 215 阅读 · 0 评论 -
Spring 事务 源码分析笔记01
Spring 中的声明式事务处理是用户最常用的,通过将事务处理的过程和业务代码分离开来,大大简化了代码的编写。声明式事务有两种使用方式,第一种是纯粹的 xml 文件配置:在这里配置了数据源 dataSource、事务管理器 transactionManager、待事务增强的目标业务 Bean、事务增强配置。第二种是注解方式,不过 xml 中依然需要配置数据源 dataSource 和事务管理器...原创 2019-09-19 21:20:52 · 174 阅读 · 0 评论 -
Spring 事务 源码分析笔记03 事务提交
TransactionAspectSupport的commitTransactionAfterReturning,事务提交1.事务状态status已经是completed,就抛出异常,说明事务已经完成2.如果事务状态是本地回滚isLocalRollbackOnly,就直接执行回滚3.如果事务状态是全局回滚,也执行回滚操作processRollback(defStatus...原创 2019-09-19 21:47:30 · 243 阅读 · 0 评论 -
Spring MVC 源码解析笔记01
看Spring MVC的程序执行入口DispatcherServlet,入口就是核心方法doDispatch入口doDispatch方法1.如果是文件上传,就处理文件上传请求processedRequest = checkMultipart(request);2. mappedHandler = getHandler(processedRequest); 解析请求,来获取...原创 2019-09-19 18:18:33 · 88 阅读 · 0 评论 -
Spring 源码复习 04 AOP 个人笔记 01
https://blog.csdn.net/c_unclezhang/article/details/78769426AOP入口,AspectJAutoProxyBeanDefinitionParser,作为核心接口BeanDefinitionParser的一个实现类一、调用parse,解析beanDefinition1.调用registerAspectJAnnotationAut...原创 2019-09-18 18:00:22 · 105 阅读 · 0 评论 -
Spring 源码复习 03 IOC 个人笔记 03 bean初始化
前面完成了beanDefinition的初始化,注册,下面开始另一个核心的内容实现 bean初始化十一、finishBeanFactoryInitialization: 初始化所有的singleton beans,不包括懒加载lazy-init的bean Spring在这个阶段,需要完成所有singletonBean的初始化 1. 先初始化LoadTimeWe...原创 2019-09-18 17:55:53 · 127 阅读 · 0 评论 -
Spring 源码复习 02 IOC 个人笔记 02
最重要的第二步,bean的解析,注册已经完成了,下面我们开始第三步:三、prepareBeanFactory : 1 主要就是设置beanFactory的各种属性,包括类加载器 2.添加beanPostProcessor 3.设置自动装配时,需要忽略的类 4.注册几个特殊的bean 5. 给beanPostProcessor注册监听器...原创 2019-09-18 17:04:51 · 97 阅读 · 0 评论 -
Spring 源码复习 01 IOC 个人笔记 01
https://blog.csdn.net/nuomizhende45/article/details/811583831.ClassPathXmlApplicationContext的refresh方法refresh为IOC核心函数,具体分为如下的十二个步骤:一、prepareRefresh : 准备工作,记录下容器的启动时间,标记已启动状态,解析配置文件中占位符二、 bea...原创 2019-09-18 13:42:29 · 149 阅读 · 0 评论 -
Spring 源码复习 01 IOC
https://blog.csdn.net/lj1314ailj/article/details/79648134 idea 编译spring5 源码指南ApplicationContext context = new ClassPathXmlApplicationContext(...)其实很好理解,从名字上就可以猜出一二,就是在 ClassPath 中寻找 xml 配置文件,根...原创 2019-09-18 12:07:08 · 454 阅读 · 0 评论 -
Spring Boot 2 源码分析一 代码结构概述
https://www.jianshu.com/p/414d3e2f04e9https://www.2cto.com/kf/201804/739214.htmlSpring boot 2 代码结构http://www.54tianzhisheng.cn/2018/04/18/spring_boot2_project/一、spring-boot该模块 47760 行代码(含测...原创 2019-09-10 22:38:17 · 176 阅读 · 1 评论