![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码系列
文章平均质量分 91
风在哪
个人网站:https://www.wygandwdn.cn
欢迎来访问啊!
展开
-
一文带你掌握Spring AOP的底层实现
Spring AOP底层实现spring aop中的joinpoint前面讲过多种类型的joinpoint,如构造方法调用、字段的设置即获取、方法调用、方法执行等,但是在spring aop中之实现了方法级别的joinpoint,确切来说是只支持方法执行类型的joinpoint。虽然spring aop仅提供方法拦截,但是实际开发过程中,这已经可以满足80%的开发需求了。如果要使用超出spring aop之外的功能,可以借助其他aop实现产品,如aspectjspring aop中的pointcut转载 2021-06-17 16:48:51 · 713 阅读 · 6 评论 -
深入理解ThreadPoolExecutor第三弹
从源头解析ThreadPoolExecutor第三弹—属性及execute方法详解首先我们看看ThreadPoolExecutor都有哪些属性:ctl属性是ThreadPoolExecutor中出现的第一个属性,所以我们首先来看看ctl属性的作用。ctl属性ctl是线程池中的重要标识,它主要有两个作用:线程池的运行状态线程池中工作线程数这里为什么要用一个变量代表线程池中两个重要标识呢,我们可以从如下两点考虑:首先,我们需要考虑的是多线程中线程安全的问题。在多线程环境中,Java中主要原创 2021-06-07 09:03:39 · 366 阅读 · 8 评论 -
深入理解ThreadPoolExecutor第二弹
从源头解析ThreadPoolExecutor第二弹—ThreadPoolExecutor的内部类ThreadPoolExecutor主要包括如下内部类:其中AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy表示任务的拒绝策略,当线程池的线程数量达到最大值并且阻塞队列已满时,根据这些不同的策略对新提交的任务进行不同的处理。它们都实现了RejectedExecutionHandler接口。而Worker代表我们执行的任务,我们提原创 2021-05-31 10:12:05 · 328 阅读 · 23 评论 -
深入理解ThreadPoolExecutor第一弹
从源头解析ThreadPoolExecutor第一弹—Executor&ExecutorService&AbstractExecutorService首先我们来看看Thread PoolExecutor的继承关系:从上图中可以看出,ThreadPoolExecutor继承自AbstractExecutorService,而AbstractExecutorService又实现了ExecutorService接口,ExecutorService接口继承自Executor。那么我们今天先来原创 2021-05-28 09:03:34 · 308 阅读 · 4 评论 -
浅析JUC-CountDownLatch
JUC-CountDownLatch详解CountDownLatch是通过AQS实现的同步器,与ReentrantLock不同的是,CountDownLatch实现的是共享式获取锁的方法,而非是独占式的。也就是说不同的线程都可以调用CountDownLatch方法获取锁,或者对锁进行释放CountDownLatch源码下面我们来看看其源码:/*CountCDownLatch是一种同步辅助工具,允许一个或者多个线程等待一组在其他线程中执行的操作完成CountDownLatch在初始化时会指定一个原创 2021-05-24 19:55:35 · 288 阅读 · 0 评论 -
Java之sleep和wait
Java之sleep和waitsleep和wait方法都是native关键字修饰的方法,这说明这两个方法是原生函数,也就是由C/C++实现的,那么我们就暂时不关心它的具体实现了。sleep方法是Thread类中的方法,而wait方法是Object中的方法,那么我们首先看看wait方法。Object#wait()从Object源码中,我们可以发现,wait有三个重载方法,分别是无参的wait方法,带有long和int类型参数的的wait方法,以及带有long类型参数的方法。其实前两个方法最终都是调用了原创 2021-05-18 13:09:56 · 5133 阅读 · 3 评论 -
浅析Java-SPI机制
Java SPI机制SPI全称为Service Provider Interface(服务提供接口),是JDK内置的一种服务发现机制,是一种将服务接口与具体实现分离以达到解耦,大大提升了程序可扩展性的机制,引入服务提供者就是引入了spi接口的实现者,通过本地的注册发现获取到具体的实现类。Java SPI实际上就是"基于接口的编程+策略模式+配置文件"组合实现的动态加载机制。系统设计之初为了各个功能模块之间解耦,一般都是基于接口编程,模块之间不对实现类进行硬编码,一旦代码涉及到具体实现类的耦合,就违反了原创 2021-05-16 21:26:43 · 374 阅读 · 0 评论 -
AQS原理初探
AQS原理初探AQS全称为AbstractQueuedSynchronizer,如果直接按名字翻译的话就是抽象队列式同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类的实现都依赖于它,如ReentrantLock(可重入锁)、Semaphore(信号量)等等。它是构建锁或者其他同步组件的基础框架。可重入锁这里解释一下可重入锁:可重入锁就是如果某个线程已经获得某个锁,可以再次获取该锁而不会导致死锁。ReentrantLock以及synchronized都是可重入锁,其中Reentrant原创 2021-05-11 12:37:11 · 636 阅读 · 2 评论 -
浅析ReentrantLock
浅析JUC-ReentrantLock首先,我们来看看ReentrantLock的继承关系(通过idea查看):从上面的类图中,我们可以发现,ReentrantLock实现了Lock接口,通过Lock接口实现了更多可扩展性的锁操作,它有更加灵活的结构,并且支持Condition锁。ReentrantLock的内部类FairSync和NonfairSync继承自另一个内部类Sync,而Sync继承自大名鼎鼎的AQS,站在巨人的肩膀上实现了这一系列的锁机制。Lock首先我们来看看Lock接口。/*原创 2021-05-10 08:52:51 · 334 阅读 · 4 评论 -
浅析Spring Boot请求映射原理
浅析Spring Boot请求映射原理Spring Boot的底层还是Spring MVC,那么Spring Boot的请求映射就与Spring MVC是相同的,那就是根据DispatcherServlet完成了请求映射的功能。但是我们没有手动去配置DispatcherServlet对应的配置项,那么Spring Boot是如何加载的DispatcherServlet呢,这个答案就是之前讲解的Spring Boot自动装配。那么首先来看看自动装配的DispatcherServlet测试程序@Rest原创 2021-05-03 20:58:48 · 1036 阅读 · 0 评论 -
Spring Boot自动装配原理初探
Spring Boot自动装配原理初探Spring Boot自动装配主要是通过注解实现的,我们直到,Spring Boot启动类会有这样一个注解:@SpringBootApplication。在这个注解里面,除了Java的元注解以外,还有三个spring自定义的注解,分别是:@SpringBootConfiguration:标识该类是spring的配置类,是对@Configuration注解的包装@EnableAutoConfiguration:这是自动装配的关键注解,本文主要就是介绍这个注解@C原创 2021-05-01 21:31:42 · 287 阅读 · 0 评论 -
Spring源码系列(四):AbstractApplicationContext
Spring源码系列四:AbstractApplicationContext首先我们看看AbstractApplicationContext的继承体系:从上图来看,AbstractApplicationContext实现了ConfigurableApplication接口,而ConfigurationApplication接口继承自ApplicationContext、Lifecycle和Closeable,ApplicationContext又扩展了BeanFactory的功能,归根到底这些都是在帮原创 2021-04-24 10:41:41 · 1876 阅读 · 0 评论 -
Java动态代理
Java动态代理代理模式我们生活中充满了代理的例子:例如房产中介,卖房者将房子委托给房产中介,买房者买房去房产中介而不是直接去寻找卖房者,这里面房产中介就是代理。再比如,现在都流行点外卖,在点外卖的场景中,商户将自己委托给外卖平台,而客户在这个外卖平台直接下单,省去了实地寻找商户的过程,这里外卖平台就是代理通过上述生活中的实际例子,相信我们都知道代理是什么了,代理模式是一种结构型设计模式,让你能够提供对象的替代品或其占位符,代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。原创 2021-04-18 11:20:15 · 225 阅读 · 0 评论 -
Spring源码系列:bean生命周期及循环依赖
1、Spring中bean的创建流程bean创建的简易流程如下所示:首先调用createBeanInstance方法进行bean的实例化然后调用populateBean进行属性的填充接着调用initializeBean进行后置处理最后调用getSingleton方法添加到单例池中以上createBeanInstance、populateBean和initializeBean均属于类org.springframework.beans.factory.support.AbstractAutowi原创 2021-04-14 11:22:41 · 333 阅读 · 0 评论 -
spring源码系列(三):FactoryBean
1、FactoryBean源码详解首先,我们来看看FactoryBean的源码:package org.springframework.beans.factory;/*由BeanFactory中的某些对象实现的接口,BeanFactory是Spring IOC容器的核心;如果bean实现了这个接口,它将被用作对象的工厂来公开,而不是直接作为bean实例来公开实现了该接口的bean不能被作为一个普通的bean使用。FactoryBean以bean的类型定义,但是它暴露的bean引用始终是由它通过原创 2021-04-13 09:09:07 · 329 阅读 · 0 评论 -
Spring源码系列(二):BeanDefinition对象
Spring源码系列二:BeanDefinition对象BeanDefinition可以看作是一个bean在Spring中的描述。首先大体介绍BeanDefinition这个对象,它描述了bean的一些基本信息,包括:bean的class名、作用域(单例、原型)、懒加载、FactoryBean、构造函数、属性值、描述以及bean的来源,spring会根据这些信息来实例化bean。BeanDefinition对象在org.springframework.beans.factory.config包下,我们原创 2021-04-11 20:11:52 · 669 阅读 · 0 评论 -
Spring源码系列(一):BeanFactory
Spring中的BeanFactory和ApplicationContextSpring通过配置文件或者注解描述Bean和Bean之间的依赖关系,利用Java的反射功能实例化Bean,并建立Bean之间的依赖关系。本文主要讲解BeanFactory和ApplicationContext,其中:BeanFactory是Spring框架最核心的接口,它提供了IOC的基本配置,ApplicationContext建立在BeanFactory的基础上,提供了更多面向应用的功能,它支持了国际化的信息,框架的事件原创 2021-04-08 19:20:28 · 488 阅读 · 0 评论