
Spring
文章平均质量分 93
张书康
学海无涯。
展开
-
SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六)
概述我们都知道Spring源码博大精深,阅读起来相对困难。原因之一就是内部用了大量的监听器,spring相关的框架,皆是如此,spring security,springBoot等。今天来看下springBoot监听器的应用。因为springBoot是对spring的封装,所以springBoot的监听器的应用主要是在启动模块。源码springBoot监听器的主要分为两类,运行时监听...原创 2018-09-21 18:33:31 · 7169 阅读 · 0 评论 -
SpringCloud | SpringCloud Feign的前世今生【源码深入分析】
概述springCloud feign主要对netflix feign进行了增强和包装,本篇从源码角度带你过一遍装配流程,揭开feign底层的神秘面纱。主要包括feign整合ribbon,hystrix,sleuth,以及生成的代理类最终注入到spring容器的过程。篇幅略长,耐心读完,相信你会有所收获。Feign架构图一些核心类及大致流程:大体步骤:1、注册FeignClie...原创 2018-10-13 11:21:22 · 4240 阅读 · 1 评论 -
Spring | Aop核心 | Cglib源码详细解析
概述很多时候在编译时期不能决定具体的对象类型,无法生成所需要的字节码。只能在运行时期,根据传入的实例,来生成字节码。这就是动态代理要解决的问题。Cglib是一个强大的高性能的字节码生成工具包。底层通过字节码增强处理框架 ASM,来生成字节码并装载到JVM。脚本语言Groovy也是使用ASM来生成或修改Java的字节码。Spring Aop中的代理生成方式采用了jdk动态代理和cglib...原创 2018-10-27 23:37:05 · 5015 阅读 · 0 评论 -
SpringBoot2 | 条件注解 @ConditionalOnBean 原理源码分析(七)
条件注解是Spring4提供的一种bean加载特性,主要用于控制配置类和bean初始化条件。在springBoot,springCloud一系列框架底层源码中,条件注解的使用到处可见。本篇就来探讨一下比较常用的一个调节注解:@ConditionalOnBean。可能不少人在使用该注解时会遇到不生效的情况:@ConditionalOnBean依赖的 bean 明明已经配置了,但就是不生效。@C...原创 2018-11-17 00:15:12 · 14776 阅读 · 7 评论 -
SpringBoot2 | Spring AOP 原理深度源码分析(八)
概述AOP(Aspect-Oriented Programming) 面向切面编程。简单来说,就是将影响对象行为的一些公共方法抽取出来,做成公共部分即为切面。使用方式就不用阐述了,本系列主要是对源码进行深度分析和总结。UML图Spring Aop 自动装配核心类 UML图:源码springboot 自动装配肯定还是从spring.factories开始:# Auto Config...原创 2018-11-25 16:11:11 · 18988 阅读 · 11 评论 -
Spring | Spring AOP 增强框架 Nepxion Matrix 详解
概述在 SpringBoot2 | Spring AOP 原理源码深度剖析(八)一文中,介绍了 Spring AOP 的多种实现机制,原理大同小异。本篇来继续介绍一款开源的 AOP 框架:Nepxion Matrix,该框架致力于对 Spring AOP 的扩展和增强,灵活而且易用。代码:https://github.com/Nepxion/MatrixMatrix框架主要对Spring做了...原创 2018-12-02 22:25:12 · 1262 阅读 · 0 评论 -
SpringBoot2 | SpingBoot FilterRegistrationBean 注册组件 | FilterChain 责任链源码分析(九)
微信公众号:吉姆餐厅ak学习更多源码知识,欢迎关注。SpringBoot2 | SpringBoot启动流程源码分析(一)SpringBoot2 | SpringBoot启动流程源码分析(二)SpringBoot2 | @SpringBootApplication注解 自动化配置流程源码分析(三)SpringBoot2 | SpringBoot Environment源码分析(四...原创 2018-12-15 20:57:45 · 12871 阅读 · 5 评论 -
SpringBoot2 | BeanDefinition 注册核心类 ImportBeanDefinitionRegistrar 源码分析 (十)
概述本篇来介绍一个Spring强大的扩展接口:ImportBeanDefinitionRegistrar,该接口主要用来注册beanDefinition。很多三方框架集成Spring 的时候,都会通过该接口,实现扫描指定的类,然后注册到spring 容器中。比如 Mybatis 中的Mapper接口,springCloud中的 FeignClient 接口,都是通过该接口实现的自定义注册逻辑。...原创 2018-12-27 11:23:47 · 7644 阅读 · 0 评论 -
SpringBoot2 | Spring IOC 流程中核心扩展接口的12个扩展点源码分析(十一)
概述Spring 的核心思想即是容器。整个容器运行时,外部看似风平浪静,内部实则一片汪洋大海。Spring 容器刷新的过程严格遵守开闭原则,内部对修改关闭,对扩展开放。可以这么理解:把 Spring 容器理解为一个钥匙环,上面挂满了钥匙,每个钥匙理解为一个扩展接口。钥匙的顺序是固定的,可理解为接口的调用顺序固定,对修改关闭。每个钥匙可以用来做不同的事情,可理解为扩展接口的实现不同,对扩展开...原创 2019-01-09 13:24:15 · 5945 阅读 · 4 评论 -
SpringCloud | 深入解析SpringCloud中的父子容器
概述在引入 SpringCloud 的项目中会多次创建 Spring 容器,本篇从源码角度深入分析具体哪些点会创建 Spring 容器,以及这些容器之间的区别与联系。本文介绍的Spring相关容器是基于SpringCloud项目。容器大致分为三层:BootStrap Spring 容器:由SpringCloud 监听器创建,用来初始化 SpringCloud 上下文Spring...原创 2019-01-27 01:00:42 · 3081 阅读 · 4 评论 -
SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
概述springBoot为我们提供了自动化装配的功能,简单方便。可以像使用插件一样,对各个组件自由组合装配。只需引入定义好的 starter 即可。有点类似于java的SPI机制,只不过SPI机制是为了解决项目与项目之间的解耦,而starter方式实现了模块化完全解耦,实现热插拔功能。今天就来自定义一个自动化装配的实现,自定义starter。自定义starter首先定义一个配置类模块:...原创 2018-09-20 19:52:20 · 10368 阅读 · 6 评论 -
SpringBoot2 | SpringBoot启动流程源码分析(二)
继续上一篇博客的启动流程分析。 在上一篇SpringBoot | SpringBoot2 | SpringBoot2启动流程源码分析(一)中我们提到springBoot启动流程大致有以下7点:第一步:获取并启动监听器第二步:构造容器环境第三步:创建容器第四步:实例化SpringBootExceptionReporter.class,用来支持报告关于启动的错误第五步:准备容器...原创 2018-09-03 16:01:43 · 22796 阅读 · 5 评论 -
SpringBoot2 | SpringBoot启动流程源码分析(一)
概述:前阵子看到了SpringCloud社区的一个开源项目,主要是对服务发现增强的功能。研究项目的时候发现代码简练,优雅,最主要是spring ioc和aop特性应用的得心应手。若非对源码有深入研究,不可能写出这么优秀的开源项目。另外在现有的springboot专栏中,大多数博文旨在应用,对一些中间件的整合之类,源码分析的博客数量有限。鉴于以上两方面,该系列应运而生。该系列主要还是Spri...原创 2018-08-31 15:29:58 · 131197 阅读 · 32 评论 -
SpringBoot | 常见几种异常配置方案
在上一篇博客中,分析了spring 和 springboot异常的源码执行流程,《SpringBoot异常机制源码分析》,解析流程梳理之后,接下来主要对我们项目中的异常配置,做一个整理。在使用spring、springBoot的项目中,常见的配置大概有以下三种方案:1)使用@ControllerAdvice注解,自定义 exceptionHandler,继承 ResponseEnt...原创 2017-12-21 18:26:16 · 2771 阅读 · 2 评论 -
SpringBoot | 异常配置源码分析
springboot的异常处理依旧是spring的异常处理,只是在spring的基础之上多了一个统一异常出口。 首先看一下spring异常处理入口肯定是spring接受请求的类中:DispatcherServlet类 在有异常的情况下,上面方法会走到异常入口processDispatchResult(processedRequest, response, mappedHandler, m原创 2017-12-20 18:52:18 · 899 阅读 · 0 评论 -
SpringMVC | 统一处理Bean Validation校验错误信息
Bean Validation是目前用的最多的验证工具,因为是运行时数据验证框架,在验证之后验证的错误信息会被马上返回。但有时候验证的错误信息,每次都要进行判断,是否有错,然后组合成项目中对应的数据模型,返回前端。这样比较麻烦。这也是本文要解决的问题。 @RequestMapping(value = "/plan", method = RequestMethod.POST) public R原创 2017-12-26 18:44:26 · 5649 阅读 · 2 评论 -
SpringSecurity | spring security oauth2.0 配置源码分析(一)
概述:在微服务发展迅速的今天,认证授权独立成微服务已是一种趋势,不仅承担着整个系统访问入口的认证和授权,还要易于扩展,能更好的接入第三方服务。而当今Oauth2协议在认证授权领域大行其道,算是功能比较完整的权限协议标准了。spring security oauth2的整合方案应该广为应用,该系列博客就来分析其机制原理。 oauth2的配置繁琐复杂,但是只要搞懂每个类的作用,整体来看,并不原创 2017-12-23 17:26:54 · 4365 阅读 · 0 评论 -
SpringSecurity | spring security oauth2.0 配置源码分析(二)
继上一篇《SpringSecurity | spring security oauth2.0 配置源码分析(一)》简单的分析配置之后,今天从源码的角度来分析配置是如何生效的,Oauth2.0如何和 Spring Security 整合的。 1)先看下Spring Security中 HttpSecurity配置:在上一篇配置讲解中,我们提到了oauth2两个注解配置: //配原创 2018-01-03 18:50:33 · 1651 阅读 · 2 评论 -
SpringCloud | FeignClient和Ribbon重试机制区别与联系
在spring cloud体系项目中,引入的重试机制保证了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试。 今天就来分别分析一下 FeignClient 和 Ribbon 重试机制的实现原理和区别,主要分为三点: 1)FeignClient重试机制分析 2)Ribbon重试机制分析 3)FeignClient和Ribbon重试机制的区别于联系原创 2018-01-03 12:03:29 · 7728 阅读 · 2 评论 -
Spring | SpringMVC异步请求源码分析
1)Spring 异步请求使用示例: @RequestMapping(value ="/{id}",method = RequestMethod.GET) public Callable<Contents> getContentById(@PathVariable("id&qu原创 2018-02-12 13:10:11 · 1525 阅读 · 1 评论 -
SpringCloud | SpringCloud Finchley + Spring Boot 2.0 集成Consul(1.2版本)
SpringCloud Finchley + Spring Boot 2.0 集成Consul(1.2版本)概述:Spring Boot 2.0相对于之前的版本,变化还是很大的。首先对jdk的版本要求已经不能低于1.8,其次依赖的spring的版本也是最新版本5.0,并集成了功能强大的webflux等。 SpringCloud Finchley 版本的升级也带来了全新组件:Spr...原创 2018-07-09 14:18:22 · 3017 阅读 · 0 评论 -
Spring Cloud | Spring Cloud Consul 重写服务发现逻辑
1)概述Spring Cloud提供了完整的服务注册和服务发现逻辑,但是在devops流行的今天,简单的服务发现逻辑,并不能满足我们的需求,特别是在服务很多的情况下。比如:如果一位开发同学拉取并部署了项目project-a,另一位同学也部署了project-a,也就意味着project-a此时有两套环境。假如一个公司有成百上千个微服务,一个服务就有可能出现很多测试环。如何保证服务调用能...原创 2018-07-10 14:17:33 · 2244 阅读 · 2 评论 -
SpringBoot2 | @SpringBootApplication注解 自动化配置流程源码分析(三)
在上一篇博客中分析了springBoot启动流程,大体的轮廓只是冰山一角。今天就来看一下springBoot的亮点功能:自动化装配功能。 先从@SpringBootApplication开始。在启动流程章节中,我们讲述了SpringBoot2大致的启动步骤,并进行了源码详解。但是在刷新容器这块并未展开,refreshContext(context);简单的一行代码,背后却做了太多...原创 2018-09-07 17:02:06 · 21578 阅读 · 6 评论 -
重写spring bean的几种方式
概述工作中会经常会需要重写jar包中的一个类,开源的jar包或者是其他项目提供的share包,比较通用的做法是下载源码下来,修改后重新打包。但是很多时候我们只是重写一个类,下载源码打包太过繁琐,而且有可能别人的share没有提供源码下载。可以通过下面几种方式重写:1、直接同包路径,同报名,进行替换这种方式简单粗暴,前提必须是同包路径,同类名。可以直接覆盖掉jar包中的类,spring项目会...原创 2019-09-17 09:51:04 · 7574 阅读 · 1 评论