源码分析
文章平均质量分 88
Java常用类、框架源码走读笔记
jazon@
芜湖
展开
-
SpringSecurity的OAuth2的授权服务器配置
SpringSecurity Oauth2 授权服务器原创 2022-08-20 10:09:49 · 1617 阅读 · 0 评论 -
Security配置生效源码分析
文章概述本文主要解决几个问题:security配置生效的入口是哪里我们平时写的security配置是如何被调用的为什么我们写的配置需要继承WebSecurityConfigurerAdapterHttpSecurity和WebSecurity是干嘛用的配置核心类启动Security,需要在启动类上添加@EnableSecurity注解@SpringBootApplication@EnableWebSecuritypublic class ThingsboardApp {原创 2022-02-19 14:08:37 · 786 阅读 · 0 评论 -
从KafkaProducer源码学习异步发送,缓冲区管理,NIO编程。
KafkaProducer初始化参数clientId没主动设置clientId时,后台都会生成一个client.id,producer-自增长的数字,producer-1。partitioner决定消息路由到Topic的哪个分区里去的metadata组件,生产端拉取Topic的元数据,包括Topic有哪些分区,分区的Leader位于哪个broker,有一个metadata.max.age参数默认是五分钟,强制重新刷新数据。request.max.size默认是1mb,一次请求最大为1原创 2021-06-06 23:54:05 · 844 阅读 · 4 评论 -
Mybatis浅析
Mybatis架构层次Mybatis的层次结构MyBatis源码分析先看传统方式开发初始化,加载配置文件InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 此方法会调用到SqlSessionFactoryBuilder的build// build方法会调用XmlConfigBuilder的parseSqlSessionFactroy sqlSessionFactory原创 2021-04-18 20:23:48 · 122 阅读 · 0 评论 -
Spring浅析
Spring浅析Spring容器初始化的过程public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 主要是做些准备工作,比如对系统属性及环境变量的初始化及验证 // 其中有个initPropertySources给子类覆盖 // 于是你可以自定义个变量逻辑原创 2020-12-27 15:45:00 · 94 阅读 · 0 评论 -
SpringBoot的@SpringBootApplication分析
SpringBoot的@SpringBootApplication分析@SpringBootApplication总览上一篇,我们有提到run()方法调用了prepareContext()方法,而preparenContext就是会将run方法的primarySource即(run方法传的类,标注了SpringBootApplication的类)放到spring的BeanDefinition中,后续refresh的时候,springboot就会将该类实例化并放到spring容器中。这里以我自己写的E原创 2020-12-20 22:31:24 · 121 阅读 · 0 评论 -
SpringBoot启动过程分析
SpringBoot启动过程分析注意:本文分析的是SpringBoot的启动流程,关于自动装配,如何加载application.yml配置等内容在之后的文章分析。SpringBoot是基于Spring开发的,所以分析SpringBoot启动过程,就是在分析SpringBoot如何创建一个Spring容器的,以及在创建过程中有哪些可供开发者个性化开发使用的钩子。(文末有总结)SpringApplication.run()方法究竟是如何启动SpringBoot项目的?可以看到,主要分为两部分,一部分是n原创 2020-12-20 16:51:22 · 273 阅读 · 1 评论 -
OAuth2----id作为token的认证方案分析
OAuth2----id作为token的认证方案分析整个方案实现如下:Resource-Service即资源服务器,在可以看作是各个业务服务,比如报警源服务、规则引擎服务,即那些和用户认证授权信息功能分开的服务。可以通过token-id作为凭证对它们进行访问,而他们并不产生凭证信息,token-id。Auth-Service即授权服务器,即用户认证授权的服务,用于产生token-id的,在这个方案里,它也是一个资源服务器,因为它需要提供一个接口,使得其他人可以通过token-id获取到该token绑原创 2020-12-06 23:35:26 · 1275 阅读 · 1 评论 -
HashMap浅析
断断续续看了好几遍hashmap…疑问为什么HashMap的容量多是2的n次方?hash算法有什么特点?何时扩容?哈希的数据结构?HashMapHashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。原创 2020-12-05 20:50:20 · 225 阅读 · 0 评论 -
ArrayList的扩容机制
ArrayList的扩容机制默认构造函数,初始一个容量为10的数组elementData,但实际上这个数据在第一次加入后才回去申请10个内存空间,就是说第一次加入就会扩容为10。下面看看第一次加入元素时,如何扩容的。 public boolean add(E e) { //添加元素之前,先调用ensureCapacityInternal方法 // 第一次加入时,size为0,size+1即为1 ensureCapacityInternal(size + 1); // I原创 2020-11-19 23:53:44 · 156 阅读 · 0 评论 -
Netty心跳服务源码剖析
Netty心跳服务源码剖析Netty提供了IdleStateHandler,ReadTimeoutHandler,WriteTimeoutHandler三个Handler检测连接有效性,IdleStateHandler,当连接的空闲时间太长时,将会触发一个IdleStateEvent事件。然后,你可以通过你的ChannelInboundHandler中重写userEventTrigged方法来处理该事件,我们分析一下IdleStateHandler。四个关键属性private final boolea原创 2020-07-24 00:21:38 · 153 阅读 · 0 评论 -
NioEventLoop源码分析
一、NioEventLoop的继承类图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VPAndYhy-1595148814624)(C:\myboot\boot\note\images\NioEventLoop的类图.png)]ScheduledExecutorService接口表示是一个定时任务接口,EventLoop可以接受定时任务。EventLoop接口: 一旦Channel注册了,就处理该Channel对应的所有I/O操作。SingleThreadEvent原创 2020-07-19 16:54:00 · 322 阅读 · 0 评论 -
ChannelPipeline,ChannelHandler,ChannelHandlerContext关系及简要代码
ChannelPipeline,ChannelHandler,ChannelHandlerContext关系及简要代码三者的关系1.每当ServerSocket创建一个新的连接,就会创建一个Socket,对应的就是目标客户端。2.每一个新创建的Socket都将会分配一个全新的ChannelPipeline3.每一个ChannelPipeline内部都含有多个ChannelHnadlerContextpipeline内部是双向链表。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上原创 2020-07-14 23:22:37 · 243 阅读 · 0 评论 -
Netty服务端接受客户端连接请求源码分析
Netty服务端接受客户端连接请求源码分析前一篇,提到NioServerSocketChannel注册到eventloop中,eventloop就是接受客户端请求的代码。eventloop作用是一个不断地循环,循环主要做三件事情:1.有条件地等待Nio事件2.处理Nio事件3.处理队列中的任务我们找到run代码里的processSelectedKeys(),这里是处理各种事件的。追踪发现最后调用的是private void processSelectedKey(SelectionKey k, A原创 2020-07-14 21:34:32 · 312 阅读 · 0 评论 -
Netty-Server启动源码分析
Netty-Server启动源码分析先提几个问题netty启动时如何创建NioServerSocketChannel的,是不是用到了JDK的NIO channel?eventloop的run方法是何时开启不断循环运行的从而达到不断监听客户端的连接的?netty是如何将NioServerSocketChannell注册到eventloop的selector的?先看一段典型的启动Netty的代码NioEventLoopGroup bossGroup = new NioEventLoopGroup原创 2020-07-12 21:49:08 · 182 阅读 · 0 评论 -
从源码浅析ThreadLocal可能的内存泄漏
从源码浅析ThreadLocal可能的内存泄漏ThreadLocal的set方法public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value);原创 2020-05-13 07:28:00 · 224 阅读 · 0 评论 -
Security工作流程及代码分析
Spring Security工作原理在了解了Security几个核心类的概念之后,我们梳理一下Security的工作原理。本文将要分析的几个问题security的工作流程,security的几个核心过滤器的功能,即什么时候把Authentication与线程绑定,什么时候进行认证,什么时候将Authentication与session关联,什么时候将Authentication改变更新到s...原创 2020-04-22 20:26:11 · 1195 阅读 · 0 评论 -
Alibaba-Sentinel核心源码浅析
Alibaba-Sentinel两种熔断降级框架的对比[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWyddFQB-1588167950781)(images\sentinel和hystrix对比.png)]Sentinel的总体流程在Sentinel中,如果要对模块一块代码进行限流、熔断等,需要定义一个资源,然后将要限流、熔断的代码块包裹起来。在 Se...原创 2020-04-29 21:47:26 · 372 阅读 · 0 评论 -
ThreadPoolExecutor浅析
ThreadPoolExecutor构造函数:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...原创 2020-03-16 21:19:34 · 132 阅读 · 0 评论 -
Semaphore浅析
SemaphoreSemaphore是信号量 ,当线程acquire()获取一个信号量(permit)时才可以不阻塞,每个release方法归还一个信号量。构造函数public Semaphore(int permits) { sync = new NonfairSync(permits);}尝试获取许可证public void acquire() throw...原创 2020-03-08 18:53:16 · 159 阅读 · 0 评论 -
CyclicBarrier浅析
CyclicBarrier栅栏内部使用了ReentrantLock和Condition两个类,用于实现到达栅栏处等待与唤醒/** The lock for guarding barrier entry */ private final ReentrantLock lock = new ReentrantLock(); /** Condition to wait on unt...原创 2020-03-08 16:09:57 · 163 阅读 · 0 评论 -
CountDownLatch源码解析
CountDownLatchCountDownLatch的同步队列结构:双向链表,其中,head是空节点new Node(),tail是最后一个线程nodeawait()方法解析 public void await() throws InterruptedException { //调用AQS的模板方法 sync.acquireSharedInterrupt...原创 2020-01-29 11:39:44 · 93 阅读 · 0 评论 -
FutureTask源码浅析
### FutureTask用Runnable提交异步任务是没有返回值的,如果需要返回值的异步任务,使用Callable接口。例子:public static class CallAbleTask implements Callable<String> { @Override public String call() throws Excepti...原创 2019-12-31 16:00:31 · 126 阅读 · 1 评论 -
ReentrantLock源码解析
ReentrantLock构造函数:public ReentrantLock() { sync = new NonfairSync();}加锁://ReentrantLock的lock方法public void lock() { sync.lock();}//sync的lock方法,sync其实就是基于AQS实现的一个类final void l...原创 2019-12-24 11:19:39 · 104 阅读 · 0 评论