Spring源码之容器的功能扩展和refresh方法解析

2022-06-17
阅读 36 分钟
1.1k
在之前文章中我们了解了关于Spring中bean的加载流程,并一直使用BeanFactory接口以及它的默认实现类XmlBeanFactory,在Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。
封面图

Spring源码之Bean的加载(五) populateBean 和 DisposableBean

2022-06-08
阅读 22 分钟
1.2k
前一篇文章主要讲解了创建 bean 中的 createBeanInstance 方法和实例化过程。本文继续讲解关于 bean 的加载过程中属性注入和注册 DisposableBean。
封面图

Spring源码之Bean的加载(四)

2022-06-07
阅读 25 分钟
1.4k
之前文章我们说过在经历了 resolveBeforeInstantiation 方法后,程序会有两个选择,如果创建了代理或者重写了 InstantiationAwareBeanPostProcessor 中的 postProcessBeforeInstantiation 方法并在方法 postProcessBeforeInstantiation 中改变了 bean,则会直接返回,否则会进行常规 bean 的创建。
封面图

Spring源码之Bean的加载(三)

2022-06-03
阅读 6 分钟
1.2k
之前文章主要讲解了从bean的实例中获取对象,准备过程以及实例化的前置处理。实例化bean是一个非常复杂的过程,本文主要讲解Spring是如何解决循环依赖。
封面图

Spring源码之Bean的加载(二)

2022-06-02
阅读 14 分钟
934
之前文章主要对 getBean 方法进行简单的介绍,和 FactoryBean 的作用,以及是如何从缓存中获取 bean。本文继续讲解 bean 的加载流程。
封面图

Spring源码之Bean的加载(一)

2022-05-30
阅读 14 分钟
956
bean 的加载之前文章主要分析了对 XML 配置文件的解析,接下来就是对 bean 的加载进行分析,同样开始用最开始的代码为入口。入口代码 getBean {代码...} 从这里我们快速先大致了解一下是如何实现的。从 BeanFactory 接口中我们选择对应实现类为 AbstractBeanFactory。 {代码...} {代码...} {代码...} 可以看到该方法代码...
封面图

Spring源码之默认标签解析及BeanDefinition注册

2022-04-07
阅读 36 分钟
1.4k
开篇上一篇讲解了 Spring 中的标签包含自定义标签和默认标签,这两种方式存在较大不同,所以本文主要讲解默认标签的解析过程。默认标签的解析是在 parseDefaultElement 方法中。该方法分别对不同标签做不同处理。 {代码...} Bean 标签的解析及注册这四种中,我们主要关注对 bean 标签的解析。bean 标签的解析是最复杂且...
封面图

Spring源码之容器的基本实现

2022-03-21
阅读 17 分钟
1.5k
开篇本文主要基于SpringFramework5.2.0.RELEASE版本,源码的下载步骤在别的文章中已经讲过,这里就不再赘述。容器的基本用法我们先创建一个简单的示例来看一下容器的基本用法。创建一个简单的 Java Bean。 {代码...} 创建一个简单 Spring 配置文件。 {代码...} ok,编写一个测试类进行测试。 {代码...} 运行之后可以看到...
封面图

学习Spring源码篇之环境搭建

2022-03-18
阅读 3 分钟
2.1k
本文是学习 Spring 源码的第一篇,下载 Spring 源码及编译运行并测试。环境准备JDK11、Gradle、Maven、SpringFramework 5.2.0.RELEASE下载源码及编译进入 github :[链接]在 Tags 中选择需要的版本,随后右侧下载即可。下载完成解压后,进入spring-framework-5.2.0.RELEASE文件中,通过终端执行以下命令: {代码...} 如...
封面图

Java JUC ThreadPoolExecutor解析

2022-02-09
阅读 14 分钟
1.3k
线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行任务时就需要 new 一个线程来执行,频繁的创建与销毁非常消耗性能。而线程池中的线程是可以复用的,不需要在每次需要执行任务时候都重新创建和销毁。二是线程池提供了资源限制和管理的手段,比如可以限制线程...
封面图

Java JUC PriorityBlockingQueue解析

2022-02-07
阅读 8 分钟
1.5k
PriorityBlockingQueue 是一个带有优先级的无界阻塞队列,每次出队返回的都是优先级最高或者最低的元素。在内部是使用平衡二叉树堆实现,所以遍历元素不保证有序。
封面图

Java JUC LinkedBlockingQueue解析

2022-01-26
阅读 8 分钟
1.4k
上篇介绍了使用CAS算法实现的非阻塞队列ConcurrentLinkedQueue,本篇介绍的是使用独占锁实现的阻塞队列LinkedBlockingQueue。
封面图

Java JUC ConcurrentLinkedQueue解析

2022-01-25
阅读 10 分钟
1.6k
ConcurrentLinkedQueue 是线程安全的无界非阻塞队列,底层使用单向链表实现,对于入队和出队操作使用 CAS 实现线程安全。
封面图

Java JUC ReentrantReadWriteLock解析

2022-01-24
阅读 13 分钟
1.6k
ReentrantReadWriteLock 和 ReentrantLock 的区别是,ReentrantLock 是独占锁,同一时间只能有一个线程获取锁,但在实际中更多的是读多写少的情况,显然 ReentrantLock 满足不了该情况,而 ReentrantReadWriteLock 采用了读写分离的策略,可以允许多个线程同时进行读取。
封面图

Java JUC ReentrantLock解析

2022-01-21
阅读 8 分钟
1.3k
它具有与synchronized相同的基本行为和语义,但 ReentrantLock 更灵活、更强大,增加了轮询、超时、中断等高级功能,并且还支持公平锁和非公平锁。
封面图

Java JUC 抽象同步队列AQS解析

2022-01-20
阅读 12 分钟
1.5k
AbstractQueuedSynchronizer 抽象同步队列简称 AQS,它是实现同步器的基础组件,并发包中的锁底层都是使用 AQS 来实现的,下面看下 AQS 的类图结构。
封面图

Java JUC LockSupport概述

2022-01-19
阅读 3 分钟
1.2k
LockSupport 类和每个使用它的线程都会关联一个许可证,在默认情况下调用 LockSupport 类的方法是不持有许可证的。LockSupport 是使用 Unsafe 类实现的。
封面图

Java JUC CopyOnWriteArrayList 解析

2022-01-11
阅读 6 分钟
1.8k
在 Java 并发包中的并发 List 只有 CopyOnWriteArrayList,CopyOnWriteArrayList 是一个线程安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。
封面图

Java 并发包原子操作类解析

2022-01-05
阅读 13 分钟
1.8k
JUC 并发包中包含 AtomicInteger、AtomicLong 和 AtomicBoolean 等原子性操作类,原理大致类似,接下来我们看一下 AtomicLong 类。
封面图

JVM性能监控与调优之概述命令行篇

2021-02-07
阅读 13 分钟
2.7k
背景说明生产环境中出现的问题生产环境发生了内存溢出该如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境 CPU 负载期飙高该如何处理?生产环境应该给应用分配多少线程合适?不加 log,如何确定请求是否执行了某一行代码?不加 log,如何实时查看某个方法的入参与返回值?为什...
封面图

深入学习RocketMQ之底层解析

2021-01-28
阅读 23 分钟
2k
RocketMQ生产者核心详解核心参数详解ProducerGroup:组名在一个应用里面是唯一的。CreateTopicKey:实际生产中不会使此参数进行生产者创建Topic。defaultTopicQueueNums:默认大小为4,一个topic下默认挂载的是四个队列。sendMsgTimeout:单位ms,消息发送的超时时间。compressMsgBodyOverHowmuch:默认压缩字节4096,自...
封面图

深入学习RocketMQ之快速入门

2021-01-26
阅读 16 分钟
4.1k
RocketMQ - 整体介绍简介RocketMQ是一款分布式、队列模型的消息中间件。支持集群模型、负载均衡、水平扩展能力。采用零拷贝的原理、顺序写盘、随机读。代码优秀,底层通信框架使用 Netty 。强调集群无单点,可扩展,任意一点高可用,水平可扩展。消息失败重试机制、消息可查询。RcoketMQ 是一款低延迟、高可靠、可伸缩、...
封面图

深入学习Redis之Redis Cluster

2021-01-01
阅读 18 分钟
10.7k
在学习Redis Cluster之前,我们先了解为什么需要集群,当遇到单机内存、并发、流量等瓶颈时,单机已经无法满足我让节点7000和7001等节点进们的要求的时候,可以采用Cluster架构方案达到负载均衡的目的。

深入学习Redis之持久化及Sentinel架构

2020-12-31
阅读 17 分钟
2.9k
Redis持久化什么是持久化Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘上。持久化的方式快照MySQL DumpRedis RDB日志MySQL binlogRedis AOFRDB什么是RDBRDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,...

深入学习Redis之基础使用及功能

2020-12-30
阅读 13 分钟
2.7k
Jedis 是 Redis 官方首选的 Java 客户端开发包。集成了 redis 的一些命令操作,封装了 redis 的 java 客户端。提供了连接池管理。

使用 ShardingSphere 实操MySQL分库分表实战

2020-11-20
阅读 27 分钟
16.6k
Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

Netty入门学习总结

2020-11-06
阅读 44 分钟
2.8k
NIO 的类库与 API 繁杂,需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、Bytebuffer 等。

理解什么是BIO/NIO/AIO

2020-11-04
阅读 19 分钟
20.3k
Java 支持 3 种网络编程模型:BIO、NIO、AIO。Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不作任何事情会造成不必要的线程开销。Java NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的...

​Socket - TCP快速入门

2020-11-03
阅读 9 分钟
2k
Socket - TCP 快速入门TCP 是什么英语:Transmission Control Protocol,缩写为 TCP。TCP 是传输控制协议;是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义。与 UDP 一样,完成第四层传输层所指定的功能与职责。和 UDP 最大的区别是需要连接的,三次握手四次挥手,校验机制保证了数据传...

Socket - UDP快速入门

2020-11-01
阅读 9 分钟
2.1k
Socket - UDP快速入门UDP是什么英语:User Datagram Protocol,缩写为UDP。一种用户数据报协议,又称用户数据报文协议。是一个简单的面向数据报的传输层协议,正式规范为 RFC 768。用户数据协议、非连接协议。为什么UDP是不可靠的它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。UDP在IP数据报的头部仅仅...