自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 逐行解读Spring(四) - 万字长文讲透bean生命周期

文章目录一、前言二、`Spring`容器的启动三、`bean`实例化1. 哪些`bean`需要在启动的时候实例化?2. 使用`getBean`从`beanFactory`获取`bean`3. `createBean`,真正的`bean`初始化逻辑3.0. `doCreateBean`是如何实例化一个`bean`的?3.1. `createBeanInstance`创建`bean`实例3.1.1. 通过`determineConstructorsFromBeanPostProcessors`方法选择构造器3.

2020-08-11 18:41:37 409 1

原创 逐行解读Spring(三) - IOC 纯注解方式支撑原理

文章目录一、前言二、关于`BeanPostProcessor`和`BeanFactoryPostProcessor`三、`BeanFactoryPostProcessor`调用时机四、`ConfigurationClassPostProcessor`工作原理1. 判断某个类是否是一个配置类2. 解析配置类上的配置信息a.`ConfigurationClass`结构b.`ConfigurationClassParser#processConfigurationClass`处理配置类的入口c.处理`@Compo

2020-07-24 17:52:37 202

原创 逐行解读Spring(二) - 自定义标签解析与component-scan原理

文章目录一、自定义标签是什么?1. 自定义标签的定义2. 关于`spring`内置的自定义标签`context:component-scan`二、源码解析1. 自定义标签解析过程2. `context:component-scan`标签工作原理3. Filter匹配流程三、实践1. 使用`context:component-scan`扫描自定义注解2. 自定义标签四、总结1. 自定义标签解析过程2. `@Component`,`@Service`等注解的实现原理五、其他上一篇我们讲了默认标签-bean标签

2020-07-03 15:33:39 342

原创 逐行解读Spring(一) - Xml配置解析,bean标签的解析

目录一、前言二、一个简单的示例三、源码解析1. beanDefinition注册流程2. bean标签解析四、总结一、前言最近在看spring源码,发现之前看的很多细节已经忘了,于是决定在看源码的过程中也把主要的流程用博客记载下来,希望自己能坚持下来吧。spring已经发展很久,整个体系已经变得很庞大了。为了能更好的把源码看下去,我决定从最基础也是最核心的IOC开始切入,并且从最原始的xml解析开始看。面对这样一个庞大的体系,我认为从最原始的方式开始学习,才能更好的看懂它的设计和实现思路。这一系列文

2020-07-02 15:42:29 330

原创 基于alibaba-canal的异构数据同步解决方案

随着业务的发展,公司的整体架构方向向微服务演进。随之衍生出各种问题,本文主要提供的是数据库隔离(分库)之后的跨库join问题一种解决方案。起因:​ 商品服务的抽离,表结构细化;导致各依赖模块出现了各种跨库join问题。在某些复杂的业务场景下,基于原表(未分库前的商品信息)的一次join操作,在新的表结构下需要做多次跨库join。基于此场景,最终确定了技术方案:对于简单的跨库join操...

2019-02-13 15:06:45 4829 1

原创 初识ThreadPoolExecutor(二)——源码简单解读

二、ThreadPoolExecutor源码简单解读1.execute方法 execute方法继承字Executor,是线程池的核心方法,公共入口,用于将一个任务提交至线程池,并为其安排处理方式。public void execute(Runnable command) { if (command == null) throw new NullPoint

2017-05-20 19:04:28 211

原创 初识ThreadPoolExecutor(一)——构造器

一、构造器根据需求的不同,我们可以选择使用不同的构造器构造ThreadPoolExecutor。这里,将介绍最全面的构造器及其各个参数的意义。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long

2017-05-20 19:03:12 325

原创 怎么理解JAVA线程的中断

1.中断状态是什么?每个线程都有一个boolean类型的中断状态,当中断线程时,这个线程的中断状态将被设置成true。但是,这并不意为着线程将会马上终止–中断操作并不会真正的中断一个正在运行的线程,而只是发出中断请求,然后线程在下一个合适的时刻中断自己(取消点)。2.boolean interrupt() 请求中断interrupt()方法会将调用该方法的线程的中断状态设置为true。如果线程在调用

2017-05-20 19:02:31 403

原创 简单使用BlockingQueue(阻塞队列)

由于BlockingQueue很适合于构建 “生产者-消费者” 模型,所以此处我打算对该行为进行模拟–生产者每100毫秒生成一个商品,而消费者每50毫秒消费一个商品,并将put,take等操作的日志信息打印到控制台,来简单的体验一下BlockingQueue。2.Product类public class Product extends Thread{ private Blocki

2017-05-20 19:01:19 238

原创 简单使用CyclicBarrier(栏栅)

使用CyclicBarrier类模拟赛跑功能:新建N个人选手,当所有选手准备好时,开始前进一次,每次前进的距离随机在1-3之间,所有选手前进一次后,裁判开始检查有没有到达终点的选手,没有则继续之前操作,直到有一人或多人同时到达终点。2.Person类public class Person extends Thread{ private final String name;

2017-05-20 19:00:48 269

原创 简单使用CountDownLatch(闭锁)

1.CountTest类实现Callable接口,用来并发的自增一个数值public class CountTest implements Callable<Integer>{ private CountDownLatch adl; public CountTest(CountDownLatch adl) { this.adl = adl; } @Ove

2017-05-20 18:59:56 1448

原创 synchronized 与 volatile的区别以及用处

1.synchronized关键字用于方法及代码块,而volatile关键词用于修饰变量。 2.在多线程环境下运行时,volatile修饰的变量将不会在线程堆区进行缓存,而是直接写入到‘主存’,所有对volatile修饰变量的修改,都将直接修改“主存”中的值。所以volatile关键字能保证数据的一致性,但却不能解决并发所带来的竞态竞争等问题。 3.synchronized关键字将...

2017-05-20 18:55:58 513

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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