摘要: 前面写了两篇文章 "《Spring Boot自动配置的魔法是怎么实现的》" 和 "《Spring Boot起步依赖:定制starter》" ,分别分析了Spring Boot的自动配置和起步依赖。在感慨Spring Boot的方便之余,也不禁产生了一点疑惑,Spring Boot 内部究竟是怎么触发 阅读全文
posted @ 2019-03-28 09:35 bluemilk 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 在定制我们自己的起步依赖——xxx.spring.boot.starter之前,我们先了解下什么是Spring Boot起步依赖。 起步依赖,是Spring Boot带给我们的一项重要的便利。要理解Spring Boot起步依赖带来的好处,先让我们假设它不存在。如果没用Spring Boot的话,你 阅读全文
posted @ 2019-03-22 12:59 bluemilk 阅读(968) 评论(0) 推荐(0) 编辑
摘要: SpringBoot 最重要的功能就是自动配置,帮我们省去繁琐重复地配置工作。相信用过SpringBoot的人,都会被它简洁的步骤所惊讶。那么 SpringBoot 是如何实现自动配置的呢? 在这之前,我们需要了解Spring的@Conditional注解特性,SpringBoot的自动配置魔法正是 阅读全文
posted @ 2019-03-21 09:51 bluemilk 阅读(2352) 评论(0) 推荐(0) 编辑
摘要: 位运算操作是由处理器支持的底层操作,因此运行速度很快。尽管现代计算机处理器拥有了更长的指令流水线和更优的架构设计,使得加法和乘法运算几乎与位运算一样快,但是位运算消耗更少的资源。 你可能经常在JDK源码中看到位运算操作,因此对位运算的掌握是有必要的。 举个例子,比如java.lang.Long的ha 阅读全文
posted @ 2019-03-14 09:55 bluemilk 阅读(1519) 评论(0) 推荐(1) 编辑
摘要: 1.String 类型的概述 Java中String就是Unicode字符序列,例如,字符串“Java\u2122”由5个Unicode字符J、a、v、a和 ™ 组成。不像C/C++中,字符串只是字符数组,Java中字符串String是一个java.lang包中的类。 但是,在Java中String 阅读全文
posted @ 2019-03-01 23:42 bluemilk 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 有个项目里有好几套产品规则,需要根据每个产品计算利息分账和生成还款计划。项目里原先的代码尝试去封装这个变化,每个产品规则创建了一个对应的类。为了方便理解,这里画了一个类图: 将代码设计成这样是一个好的趋势,符合面向对象的思想,既能复用公共的逻辑,又更好去维护。但是,有一处代码我觉得可以优化下,具体代 阅读全文
posted @ 2019-01-28 15:50 bluemilk 阅读(1647) 评论(1) 推荐(0) 编辑
摘要: SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 阅读全文
posted @ 2019-01-23 13:52 bluemilk 阅读(3738) 评论(0) 推荐(1) 编辑
摘要: Dubbo IOC 是通过 setter 方法注入依赖。Dubbo 首先会通过反射获取到实例的所有方法,然后再遍历方法列表,检测方法名是否具有 setter 方法特征。若有,则通过 ObjectFactory 获取依赖对象,最后通过反射调用 setter 方法将依赖设置到目标对象中。 在上面代码中, 阅读全文
posted @ 2019-01-22 22:40 bluemilk 阅读(1127) 评论(0) 推荐(0) 编辑
摘要: 先看一个不设置timeout造成的线上事故。 一次线上事故 有一次生产上的一个服务出了点故障,一个原本每5分钟执行一次的定时任务突然不执行了。第一反应是任务执行报错,查看日志,却没有找到任何异常报错信息。 但通过日志可以确定的是,该任务线程还在执行中。按照这个定时任务执行的业务逻辑来说,这是不正常的 阅读全文
posted @ 2019-01-19 16:49 bluemilk 阅读(6440) 评论(0) 推荐(0) 编辑
摘要: 痛点 最近接手一个老项目,这个项目几经转手,到我这里时,发现代码的可阅读性实在是很差,对于一个有点代码洁癖的我来说,阅读起来实在是很难受。其中一个痛点,现在就拉出来讲讲。该项目需要与另外一个项目进行业务对接,因此有很多HTTP接口要调用。现在项目发送HTTP请求的代码跟业务代码完全合在一起,看起来就 阅读全文
posted @ 2019-01-17 22:31 bluemilk 阅读(363) 评论(0) 推荐(0) 编辑