自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

夜勿语的博客

专注于技术分享

原创 全网最深分析SpringBoot MVC自动配置失效的原因
原力计划

前言 本来没有计划这一篇文章的,只是在看完SpringBoot核心原理后,突然想到之前开发中遇到的MVC自动失效的问题,虽然网上有很多文章以及官方文档都说明了原因,但还是想亲自看一看,本以为很简单的事情,没想到却引发出一个较复杂的问题,请教了很多人都没有得到结果,网上文章也没有写清楚的,最后还是自...

2020-06-29 21:58:12 213 0

原创 这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)
原力计划

文章目录前言正文启动原理事件驱动自动配置原理Condition注解原理总结 前言 SpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本非常低,但是学习其实现原理的成本大大增加,需要先了解熟悉Spring原理。如果还不清楚Spring原理的,可以先...

2020-06-26 13:14:34 429 0

原创 这一次搞懂Spring Web零xml配置原理以及父子容器关系
原力计划

前言 在使用Spring和SpringMVC的老版本进行开发时,我们需要配置很多的xml文件,非常的繁琐,总是让用户自行选择配置也是非常不好的。基于约定大于配置的规定,Spring提供了很多注解帮助我们简化了大量的xml配置;但是在使用SpringMVC时,我们还会使用到WEB-INF/web.x...

2020-06-20 13:11:29 321 0

原创 这一次搞懂SpringMVC原理
原力计划

文章目录前言正文请求入口组件初始化调用Controller参数、返回值解析总结 前言 前面几篇文章,学习了Spring IOC、Bean实例化过程、AOP、事务的源码和设计思想,了解了Spring的整体运行流程,但如果是web开发,那么必不可少的还有Spring MVC,本篇主要分析在请求调用过程...

2020-06-15 23:43:32 754 0

原创 这一次搞懂Spring事务是如何传播的
原力计划

文章目录前言正文事务切面的调用过程事务的传播性概念实例分析总结 前言 上一篇分析了事务注解的解析过程,本质上是将事务封装为切面加入到AOP的执行链中,因此会调用到MethodInceptor的实现类的invoke方法,而事务切面的Interceptor就是TransactionIntercepto...

2020-06-12 00:00:09 282 0

原创 这一次搞懂Spring事务注解的解析

前言 事务我们都知道是什么,而Spring事务就是在数据库之上利用AOP提供声明式事务和编程式事务帮助我们简化开发,解耦业务逻辑和系统逻辑。但是Spring事务原理是怎样?事务在方法间是如何传播的?为什么有时候事务会失效?接下来几篇文章将重点分析Spring事务源码,让我们彻底搞懂Spring事务...

2020-06-09 22:14:13 214 0

原创 这一次搞懂Spring代理创建及AOP链式调用过程

文章目录前言正文基本概念代理对象的创建小结AOP链式调用 前言 AOP,也就是面向切面编程,它可以将公共的代码抽离出来,动态的织入到目标类、目标方法中,大大提高我们编程的效率,也使程序变得更加优雅。如事务、操作日志等都可以使用AOP实现。这种织入可以是在运行期动态生成代理对象实现,也可以在编译期、...

2020-06-06 18:23:58 239 0

原创 Spring IOC原理补充(循环依赖、Bean作用域等)

文章目录前言正文循环依赖什么是循环依赖?Spring是如何解决循环依赖的?作用域实现原理以及如何自定义作用域作用域实现原理自定义ScopeBeanPostProcessor的执行时机SpringBoot零配置实现原理浅析总结 前言 通过之前的几篇文章将Spring基于XML配置的IOC原理分析完成...

2020-06-02 23:39:57 583 0

原创 这一次搞懂Spring的Bean实例化原理

文章目录前言正文环境准备两个重要的Processor注册BeanPostProcessor对象Bean对象的创建createBeanInstanceaddSingletonFactorypopulateBeaninitializeBean总结 前言 前两篇文章分析了Spring XML和注解的解析...

2020-05-31 20:52:40 1021 1

原创 这一次搞懂Spring自定义标签以及注解解析原理

前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的。同时我们常用的注解如:@Service、@Component、@Controller标注的类也是需要在xml中配置<co...

2020-05-26 22:50:20 215 0

原创 这一次搞懂Spring的XML解析原理
原力计划

前言 Spring已经是我们Java Web开发必不可少的一个框架,其大大简化了我们的开发,提高了开发者的效率。同时,其源码对于开发者来说也是宝藏,从中我们可以学习到非常优秀的设计思想以及优雅的命名规范,但因其体系庞大、设计复杂对于刚开始阅读源码的人来说是非常困难的。所以在此之前首先你得下定决心,...

2020-05-24 16:39:26 735 2

原创 记一次Idea+Gradle编译Spring源码遇到的坑

打算开始研究Spring源码,于是照着书上的指导从网上下载了Spring5.0.2版本和Gradle4.0(必须JDK1.8.60以上),本地编译的时候没有任何问题,就是导入Idea的时候一直报下面这个错: 在网上查了很多资料,有说JKD版本太低,有说Gradle版本不对等等,都试过之后依然报这个...

2020-02-28 15:54:57 323 0

原创 消息队列——Kafka基本使用及原理分析

一、什么是Kafka 二、Kafka的基本使用 Java 三、KafKa原理分析 四、总结

2019-11-22 22:51:11 109 0

原创 消息队列——RabbitMQ的基本使用及高级特性

文章目录一、引言二、基本使用1. 简单示例2. work queue和公平消费消息3. 交换机三、高级特性1. 消息过期2. 死信队列3. 延迟队列4. 优先级队列5. 流量控制a. 服务端限流b. 客户端限流6. 消息可靠性a. 如何确保消息发送到交换机b. 如何确保消息正确路由到队列c. 消息...

2019-11-12 20:14:30 126 0

原创 MongoDB——基本使用及集群搭建

文章目录什么是MongoDb?基本概念与关系型数据库的比较Mongo的高效性文件存储基本使用启动/连接服务基础操作命令高可用集群搭建应用场景总结 什么是MongoDb? 基本概念 MongoDB是一种支持多语言面向文档的NOSql数据库,它不支持事务操作(4.2版本开始支持跨文档分布式事务)。什么...

2019-10-31 22:09:54 88 0

原创 消息队列——ActiveMQ使用及原理浅析

文章目录引言正文一、ActiveMQ是如何产生的?产生背景JMS规范基本概念JMS体系结构二、如何使用?基本功能消息传递P2Ppub/sub持久订阅消息传递的可靠性事务型会话与非事务型会话持久化与非持久化消息的存储策略消息发送策略三、原理浅析发送原理消费原理消费消息流程消息确认及消息重发四、基本优...

2019-09-11 20:01:09 551 0

原创 Dubbo——服务目录

引言 前面几篇文章分析了Dubbo的核心工作原理,本篇将对之前涉及到但却未细讲的服务目录进行深入分析,在开始之前先结合前面的文章思考下什么是服务目录?它的作用是什么? 正文 概念及作用 清楚Dubbo的调用过程就知道Dubbo在客户端和服务端都会为服务生成一个Invoker执行体,这个Invoke...

2019-09-10 08:11:20 296 0

原创 Dubbo——服务调用过程

文章目录引言服务的交互服务降级集群容错服务调用服务端接收请求总结 引言 经过之前文章的铺垫,现在可以来分析服务的交互调用过程了。 服务的交互 服务降级 从名字上看我们不难理解MockClusterInvoker相当于是对普通Invoker(如DubboInvoker)的装饰增强,提供集群容错相关的...

2019-09-07 21:42:47 359 0

原创 Dubbo——服务引用

引言 上一篇我们分析了服务发布的原理,可以看到最终默认是创建了一个Netty server,这一篇

2019-09-03 14:42:22 658 0

原创 Dubbo——服务发布原理

引言 在使用Dubbo的时候你一定会好奇它是怎么实现RPC的,而要了解它的调用过程,必然需要先了解其服务发布/订阅的过程,本篇将详细讨论Dubbo的发布过程。 源码分析 新学Dubbo大都会比较疑惑,服务启动时的入口在哪?是如何加载我们的配置的?由于Dubbo是基于Spring的自定义扩展标签来实...

2019-08-31 18:57:00 832 0

原创 Dubbo——SPI及自适应扩展原理

文章目录引言正文一、什么是SPI?1. Java SPI的实现2. Dubbo SPI实现原理由配置文件得到的猜想SPI源码二、自适应扩展机制三、Dubbo IOC 引言 Dubbo虽然已交由apache管理,并且社区活跃度也不如SpringCloud,但也是国内应用比较广泛的RPC框架,其背后的...

2019-08-27 18:42:11 835 2

原创 Zookeeper——Watcher原理详解

文章目录引言正文一、如何注册监听二、如何触发监听事件三、事件类型有哪些四、Watcher可以被无限次触发么?为什么要这么设计?五、Watcher实现原理1. 客服端发送请求a. 初始化客户端并绑定Watcherb. exists/getData/getChildren绑定Watcher以及发送请求...

2019-08-24 17:13:10 708 0

原创 Zookeeper——基本使用以及应用场景(手写实现分布式锁和rpc框架)

Zookeeper的基本使用 在之前的文章主要讲述了Zookeeper的原理,本文则是实践,包含Zookeeper单机环境到集群环境的搭建,基本配置,JavaAPI的使用以及手写实现分布式锁等内容。(PS:在往下进行之前,请务必准备至少3台linux虚拟机搭建集群。) Zookeeper单机部署 ...

2019-08-21 19:36:32 609 0

原创 Zookeeper——分布式一致性协议及Zookeeper Leader选举原理

一、引言 随着业务的增长,单体架构发展为分布式架构,大大提升了业务的处理能力,但同时也带来了很多单体架构不存在的问题,如: 各节点之间网络通信的异常。 由于网络异常造成的网络分区。 引出“三态”。在单体架构中只会存在“成功”或“失败”两种结果,但是在分布式架构中由于网络异常将会出现“未知”的结果...

2019-08-17 21:54:26 646 0

原创 分布式架构概述及设计

引言 随着越来越多的人参与到互联网的浪潮来,曾经的单体应用架构越来越无法满足需求,所以,分布式集群架构出现,也因此,分布式搭建开发成为了Web开发者必掌握的技能之一。那什么是分布式呢?怎么实现分布式以及怎么处理分布式带来的问题呢?本系列文章是笔者对自身学习的总结,包含但不限于Zookeeper、D...

2019-08-15 21:50:06 5177 0

原创 设计之禅——访问者模式

引言 访问者模式是遵循单一职责原则,将行为和属性分离的一种设计模式,它可以在不改变元素结构的前提下定义元素新的操作。类比到现实当中就像博物馆,它是固定不变的,其中有各种各样的展品,而我们就是访客,可以是参观、可以是打扫、也可以是管理。同样访客模式正是具有了这样一个特点。 正文 访客模式含有五大角色...

2019-05-11 21:02:00 321 0

原创 设计之禅——备忘录模式

引言 备忘录模式是非常简单的一种模式,应用场景非常广泛,如编辑器的ctrl + z、数据库事务的回滚、游戏的存档等等都符合该模式的思想——备份(比较疑惑为什么叫备忘录模式,叫备份模式不是更贴切么?)。 详解 备忘录模式就是将一个对象的内部状态保存到对象的外部,这样,在将来的任一时间点都可以恢复到之...

2019-05-04 18:41:05 296 0

原创 设计之禅——中介者模式

引言 在面向对象编程中,无可避免的是对象之间的引用,引用给我们带来便捷(对象的复用),但同时也会给类与类之间造成强依赖关系。在一对一的关系中,这看起来并不会造成什么不良的影响,但若是在一对多中,修改任意的一个对象,都会影响到其它调用者,形成强耦合。 模式定义 如同上面的图,当对象之间形成网络结构...

2019-05-03 18:34:30 335 0

翻译 设计之禅——解释器模式(译文)

前言 解释器模式在平时基本上用不到,因此笔者也不打算花太多精力在这上面,但强迫症使然,所以翻译了GeeksForGeeks上面的一篇文章,本文采取意译及注解方式,原文链接Interpreter Pattern 译文 解释器模式是一种行为型模式,它提供一个解析特定语法规则的解释器。 该模式包含一个...

2019-02-13 13:53:21 351 0

原创 设计之禅——享元模式

引言 之前已经写了17篇关于设计模式的文章,而这些设计模式大都是为了降低代码之间的耦合,避免违反开闭原则,但它们大都有同样的一个缺点,产生更多的类和对象,如果数量达到一定程度,就会导致系统性能降低,而今天要讲的这个模式就是为了解决这样的一个问题,他就是享元模式。 正文 定义 享元模式是为了尽可能...

2019-02-12 20:38:20 437 0

原创 设计之禅——责任链模式

引言 在平时开发中如果遇到需要由多个不同的类对象来处理同一个请求时,你会怎么做呢? if (condition) { object1.invoke(); } else if (condition1) { object2.invoke(); } else if (condition2) { o...

2019-02-11 17:57:16 432 0

原创 设计之禅——桥接模式

前言 桥接模式也是经典的23种模式之一,不过在《HeadFirst设计模式》书中只对其做了一个简短的描述,本文则是根据网络上的博客得出的个人理解和总结。 正文 定义 在维基百科上是这样定义桥接模式的: 桥接模式是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可...

2019-02-10 19:55:49 428 0

原创 设计之禅——原型模式

前言 “万事万物皆对象!”,这是面向对象的宗旨,在Java中我们无时无刻不在创建对象,那创建对象有哪些方式呢?可以通过new或者反射,还有就是今天要讲的原型模式。那什么是原型模式,为什么又要通过原型模式去创建对象呢? 正文 无论是通过new还是反射,我们都免不了要去手动设置其属性,如果类结构非常复...

2019-02-09 19:33:16 372 0

原创 设计之禅——组合模式

引言 昨天我写了一篇迭代器模式的文章,其中用到餐厅菜单的例子,如果你细想过,肯定是能发现一些问题的,比如昨天的菜单中只有一级菜单(不清楚的同学可以先看看我上一篇文章,但这只是一个引子,并不影响后面的阅读),那当某些餐厅需要往自己的菜单中添加子菜单列表(比如甜品),之前实现的迭代器就无法正确工作了,...

2019-02-08 18:03:35 385 0

原创 设计之禅——迭代器模式

前言 迭代器想必大家不会陌生,作为Java中内置的API,平时我们使用的也是非常多的。但你是否曾想过它和迭代器模式有什么关联?并且Java中已经有for循环遍历,为什么还会需要这样一个类? 定义 Java中大部分的数据结构都有返回iterator的方法,且都实现自Java.util.Iterato...

2019-02-07 19:49:33 399 0

原创 设计之禅——状态模式

前言 之前我写过一篇策略模式的文章,讲的是如何灵活地改变对象的行为,今天要讲的模式和策略模式非常像,它也是让你设计出如何灵活改变对象行为的一个模式,与策略模式不同的是它是根据自身状态而自行地改变行为,它就是状态模式。 详解 普通实现 首先我们来分析一个实例:现在的游戏基本都有自动打怪做任务的功能,...

2019-02-06 21:25:06 428 0

原创 设计之禅——外观模式

概述 平时在我们生活中,我们常常会接触学习各种各样的新事物,而能够快速吸引留住大量客户的都有一个共性,就是简单易学好上手。比如,windows和linux系统,前者比后者更加普及的原因也就是不需要经过专业系统的学习就能轻松使用。同样的,这种思想在编程界有一个专业的术语——外观模式。 定义 首先我们...

2019-02-05 18:45:10 364 0

原创 设计之禅——适配器模式

概述 对于适配器相信大家不会陌生,生活中有各种各样的例子,像耳机转接线,充电器适配器,水管适配接口等等。通过类比我们很容易理解适配器的作用: 将已有的本无法使用的类通过适配器转换,从而达到资源复用,节省开销的目的。 那要如何通过代码实现这一点呢?既然要将被适配者转换为目标接口类,那么适配器肯定...

2018-12-08 23:20:35 291 0

原创 设计之禅——我只要结果(命令模式)

前言 生活中我们会接收到各种各样的命令,也会发出各种各样的命令,虽然命令的事情都各不相同,但是都具有一个共同的特质,那就是对于发出命令的人而言他不需要知道你是怎么实现的,他只要得到结果就行了,相信大家都会常听到BOSS这样对自己说(当老板真好啊!)。那么,我们在写程序时,如果能将请求的调用和请求的...

2018-12-01 23:08:34 385 0

原创 设计之禅——装饰者模式详解(与代理模式的区别以及与其他模式的组合)

前言 相信很多初学者都对JavaAPI中的IO包感到头大,其中的类非常多,看着看着就晕了,笔者也是一样。不过,IO包的设计其实就是使用了装饰者模式,了解了这个模式再去看IO包就会发现很清晰了。 定义 Coding Common WithFactory IO包中的装饰者 与代理模式的区别 总结 ....

2018-11-26 23:03:30 1702 0

提示
确定要删除当前文章?
取消 删除