自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 向Spring容器注入Bean的方法

1 如何向Spring容器中注入组件?向Spring容器中注入组件的方法大概有4种:包扫描+组件注解标注(@Component、@Controller、@Service、@Repository); @Bean,导入第三方包中的组件; @Import向Spring容器中快速导入一个组件; 使用Spring提供的FactoryBean(工厂bean)。第一种和第二种都比较熟悉,在项目中使用的比较多,主要介绍下第三种和第四种。2 @Import详解@Target(ElementType.

2021-01-27 09:37:36 618

原创 编译spring源码

1 概述想看Spring源码当然避免不了要本地编译源码,更加方便的去调试源码和跟踪源码。2 下载源码先获取源码:git clone https://github.com/spring-projects/spring-framework.git然后选择版本:git checkout origin/5.2.x3 Gradle版本进入到源码下载目录:查看gradle\wrapper下的gradle-wrapper.properties文件,看需要的什么版本的gradle。

2021-01-27 09:33:56 170

原创 spring security的session管理

1 spring security的session管理spring security关于认证session的逻辑处理在接口SessionAuthenticationStrategy的onAuthentication方法中,先看看这个接口和其实现类。1.1 SessionAuthenticationStrategy接口public interface SessionAuthenticationStrategy { /** * 当一个认证生成之后处理sessio

2021-01-24 15:49:59 9859 1

原创 spring security-认证授权

1 WebSecurityConfigurerAdapter在说spring security 认证和授权流程之前,一定要先了解WebSecurityConfigurerAdapter配置类如何工作的。而且也必须了解清楚filter的顺序,才能更好了解其调用工作流程。Spring security config具有三个模块,一共有3个builder,认证相关的AuthenticationManagerBuilder和web相关的WebSecurity、HttpSecurity 。Authenti

2021-01-24 15:47:09 793

原创 java泛型擦除

1 泛型简介泛型是参数化类型,将以前具体的类型参数化,是jdk1.5引入的。为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”。2 类型擦除2.1 无限制类型擦除类型擦除前:类型擦除后:反编译后,本来类型为T的data变量,类型被编译器变为Object了。当在外面调用ReturnVo类时,传入String类型,看看编译器是如何将data变量从Object类型转化为String类型的:invokevirtual

2021-01-24 15:42:53 114

原创 Spring IOC源码分析(一)

1.什么是IOC?在面向对象系统中,对象封装了数据和对数据的处理,而对象之间的依赖关系体现在对数据和方法的依赖上。当业务很复杂,涉及到的类非常多,这个时候如果由开发者手动的去给每个对象导入它依赖的对象,这将会导致代码高度耦合,简直是牵一发而动全身。但如果,对象之间的依赖关系并不需要我们手动导入,而是将其交给某一个框架或者平台来处理。这无疑会大大减少代码的耦合度,降低编码的复杂度,将应用从复杂的依赖关系中解放出来。IOC(Inverse of Control)控制反转,有时候也被称为DI依赖注入,

2020-08-26 20:28:08 147

原创 JAVA NIO入门一

1.简介以前还算是比较系统的学习过Netty,但是没有留下过什么笔记,时间一长也就忘光了。正在做的项目的一个模块是用Netty做的,虽然使用的比较简单,但还是好好的整理下吧。学习Netty之前学习下NIO是很有必要的。2.什么是NIOJava NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),NIO提供了与标准IO不同的IO工作方式。先看下标准IO,然后再看看NIO和BIO之间的区别。2.1 BIOBIO其实就是Blocking IO,

2020-07-18 16:39:44 167

原创 JVM系列—概述

1.简介最近来了个大版本,没有很大的精力去弄J.U.C下的源码分析,先整理下JVM相关的知识,等有空了再去好好分析下J.U.C下的源码。2.JVM、JDK、JREJVM:是Java Virtual Machine的缩写。JVM是一种用于计算设备的规范,它是一个虚构的计算机的软件实现。简单的说,JVM是运行byte code字节码程序的一个容器。JVM屏蔽了与具体平台相关的信息,使得Java程序只需生成在JVM上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JRE:是Java Run

2020-07-09 19:07:00 278

原创 Java线程的生命周期

1.操作系统线程状态从上图可以看出,操作系统层面线程状态有5种,下面分别介绍一下:New:表示线程被创建了,但是还不允许分配 CPU 执行。因为这个状态只是说明你在编程语言层面被创建了,操作系统层面还没有被创建,还谈不上分配 CPU 执行。Ready:在操作系统层面已经成功创建了,接下来就是等待分配 CPU 执行了,或者说是正在运行的线程突然时间片用完,让出CPU。Running:表示线程获取CPU,正在运行。Waiting:正在运行的线程突然发现自己需要等待某个条件才能继续运行下去,如I/O

2020-07-07 10:49:34 201

原创 ReentrantReadWriteLock源码分析

1.简介前面详细的介绍了ReentrantLock,ReentrantLock是排它锁,同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。由于读服务并不存在锁竞争情况,如果一个线程在读时禁止了其他线程对共享变量的读势必会导致程序性能大幅度降低。所以,读写锁就出现了,这就是我们今天的主人公:ReentrantReadWriteLock。2.类继承关系ReadWriteLock接口只有二个方法:public interface ReadWr

2020-06-28 19:39:26 107

原创 ThreadLocal详解

1.简介ThreadLocal顾名思义是线程私有的局部变量存储容器,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离。简单demo: public static void main(String[] args) { ThreadLocal<String> threadLocal = new ThreadLocal<String>(); Random random = n

2020-06-19 15:51:53 184

原创 ReentrantLock源码分析(二)

1.简介条件锁,顾名思义是指线程在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。和以前在synchronized代码块中或者synchronized方法中使用wait()和notify()方法一样。使用wait()和notify(): public static void main(String[] args) throws InterruptedException { Object lock = new Object();

2020-06-12 16:16:38 126

原创 ReentrantLock源码分析(一)

1.ReentrantLock简介理解了AQS,ReentrantLock理解起来其实就没有什么难度了。ReentrantLock,可重入锁。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。2.ReentrantLock继承关系Lock中的方法: 主要提供了获取锁、尝试获取锁、释放锁、条件锁等几个方法。3.源码分析3.1 ReentrantLock内部类ReentrantLock内部

2020-06-11 11:38:05 271

转载 java内存模型JMM

简介主要说一下Java 内存模型的基础、重排序、顺序一致性、Volatile 关键字、锁、final。并发编程的模型分类并发编程需要处理二个关键性的问题:线程之间如何通信 和 线程之间如何同步。通信:通信是指线程之间以何种机制来交换信息。线程之间的通信机制有两种:共享内存和 消息传递。共享内存:线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。消息传递:线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。同步:同步是指程序用于控制不同线程之

2020-06-08 19:32:02 122

原创 AQS

1.简介AQS的全称是AbstractQueuedSynchronizer(AQS)。抽象的队列式同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock、Semaphore、CountDownLatch。2.unsafejava中的魔法类sun.misc.Unsafe,为我们提供了访问底层的机制,这种机制仅供java核心类库使用,而不应该被普通用户使用。2.1 获取Unsafe对象查看Unsafe的源码我们会发现它提供了一个ge

2020-06-03 09:54:58 183

原创 锁的介绍

1.java线程状态2.锁的种类从线程是否需要对资源加锁可以分为 悲观锁 和 乐观锁从资源已被锁定,线程是否阻塞可以分为 自旋锁从多个线程并发访问资源,也就是 Synchronized 可以分为 无锁、偏向锁、 轻量级锁 和 重量级锁从锁的公平性进行区分,可以分为公平锁 和 非公平锁从根据锁是否重复获取可以分为 可重入锁 和 不可重入锁从多个线程能否获取同一把锁分为 共享锁 和 排他锁3.乐观锁VS悲观锁悲观锁:悲观锁在持有数据的时候总会把资源或者数据锁住,此时如果有其他线程想要获

2020-06-02 20:09:10 203

原创 HashMap源码分析准备工作-二叉树

1.简介想要分析好HashMap,必须要把红黑树的操作讲清楚。因此先依次弄清二叉树、二插搜索树以及平衡二叉树的操作,最后在分析红黑树的操作。2.二叉树遍历操作二叉树:1.先序遍历递归:public void preRecOrder(TreeNode root) { if (root == null) return; System.out.println...

2020-04-24 15:13:08 198

原创 Vector源码分析

1.简介说实话Vector在工作中用的比较少,至少我没有用到过。Vector在面试中经常用来和ArrayList进行比较,但凡知道Vector的都应该知道Vector是线程安全的,而ArrayList是线程不安全的,究其原因其实就是因为Vector在增、改、删操方法加了synchronized,利用锁来保证线程安全。2.Vector的继承关系Vector也继承了AbstractLis...

2020-04-17 15:07:16 106

原创 ArrayList源码分析

1.简介ArrayList是平常工作中最常使用的集合,其实就是一个动态数组,支持动态扩容。2.ArrayList的继承关系ArrayList继承了AbstractList,实现了List、RandomAccess、Cloneable、Serializable等接口。3.ArrayList类中的变量 /** * 默认的初始容量为10 */ private ...

2020-04-16 17:58:56 138

原创 java并发之AQS

谈ReentrantLock之前,我们先来看看AbstractQueuedSynchronizer(AQS)。抽象的队列式同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock、Semaphore、CountDownLatch。AQS类的详情状态位state从源码可以看出状态位state是用volatile修饰的,volati...

2018-11-16 16:52:41 193 1

原创 java并发之synchronized

synchronized自从学习java就开始接触,说实话平时用的也很少,但是必须要知道怎么回事。17年找工作的时候看了不少博客,也大致理解了是怎么回事。这篇文章其实差不多是照搬死磕java系列和Java并发编程艺术,写下来是为了记忆的更深,过段时间自己也可以翻翻。synchronized分析synchronized的实现基础:synchronized修饰普通方法,锁是当前的实例对象。...

2018-11-14 18:15:10 145

原创 写在开头

一只想要变强的小菜鸟一直以来想写点东西。想把自己学习的东西,自己的一些心得体会记录下来。说来令人惭愧,每次总是提起了兴趣,信誓旦旦准备动笔的时候却觉得自己看懂了也就不需要继续花时间写下来。今天为什么突然决定写点什么呢?大概是因为年纪真的大了,看过的东西总是很快地忘记,然后又赖得回过头来去温习。所以啊,觉得有必要把自己看过的东西记录下来,也好作为日后温习的一种方式。2018年7月05号入职,很菜...

2018-10-08 14:53:28 101

空空如也

空空如也

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

TA关注的人

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