自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring security-源码流程分析(六)-oauth授权模式分析

spring security经常在项目中用到,但是平常只是简单的使用肯定是不够的,我们需要了解深层次的东西,才能在使用的过程中不畏惧,本次打算从demo入手,跟踪源码,剖析security内在本文在上一篇的基础上进行,继续追踪看下不同类型模式的grant方法到底做了什么一、ResourceOwnerPasswordTokenGranter1、从继承关系可以看到,父类AbstractTokenGranter2、在getOAuth2Authentication方法中进入子类自己的方法注意,.

2022-04-13 16:01:15 1102 1

原创 spring security-源码流程分析(五)-oauth默认请求地址(/oauth/token)是如何生效的?

spring security经常在项目中用到,但是平常只是简单的使用肯定是不够的,我们需要了解深层次的东西,才能在使用的过程中不畏惧,本次打算从demo入手,跟踪源码,剖析security内在一、@FrameworkEndpoint注解的作用1、在之前的文章中我们看到AuthorizationServerEndpointsConfiguration配置中配置了AuthorizationEndpoint和TokenEndpoint等,他们都是继承自AbstractEndpoint2、Author.

2022-04-06 16:48:31 4389

原创 spring security-源码流程分析(四)-spring-security-oauth

spring security经常在项目中用到,但是平常只是简单的使用肯定是不够的,我们需要了解深层次的东西,才能在使用的过程中不畏惧,本次打算从demo入手,跟踪源码,剖析security内在本文在spring security基础上继续分析spring security oauth源码,关于spring-security-oauth是在oauth2基础上进行的封装,关于oauth2内容建议看oauth2---------------------以下内容都在上图里面有所表现,看图能理解就不用看文.

2022-04-02 15:38:29 743

原创 spring security-源码流程分析(三)

spring security经常在项目中用到,但是平常只是简单的使用肯定是不够的,我们需要了解深层次的东西,才能在使用的过程中不畏惧,本次打算从demo入手,跟踪源码,剖析security内在一、模拟一次请求,过滤器执行流程本次重点关注以上几个过滤器的部分执行过程SecurityContextPersistenceFilterpublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain).

2022-03-31 13:54:28 1920

原创 spring security-源码流程分析(二)

spring security经常在项目中用到,但是平常只是简单的使用肯定是不够的,我们需要了解深层次的东西,才能在使用的过程中不畏惧,本次打算从demo入手,跟踪源码,剖析security内在一、过滤器链的加载过程上一篇文章跟踪源码流程,我们看到创建了httpSecurty,本文重点关注过滤器的加入过程1、http.csrf()2、addFilter(new WebAsyncManagerIntegrationFilter())直接添加过滤器。。。加载的所有配置通过下面方法进行过滤.

2022-03-28 17:19:27 1480

原创 spring security-源码流程分析(一)

spring security经常在项目中用到,但是平常只是简单的使用肯定是不够的,我们需要了解深层次的东西,才能在使用的过程中不畏惧,本次打算从demo入手,跟踪源码,剖析security内在环境springboot: 2.3.4.RELEASEspring security :spring-boot-starter-security版本跟随springboot一、springboot默认自动配置了security,我们看下security相关类都是在什么情况下加载的如上图,securit.

2022-02-25 16:52:31 777

原创 HashMap(常见面试问题汇总)-头插法为啥产生环形了呢?为啥使用扰动函数?ConcurrentHashMap的分段锁的实现原理是什么?

**1,头插法产生闭环的根本原因**

2021-11-08 17:19:20 967

原创 算法-----动态规划

原文:动态规划是解决下面这些性质类问题的技术: 1. 一个问题可以通过更小子问题的解决方法来解决(译者注:即问题的最优解 包含了其子问题的最优解,也就是最优子结构性质)。 2. 有些子问题的解可能需要计算多次(译者注:也就是子问题重叠性质)。 3. 子问题的解存储在一张表格里,这样每个子问题只用计算一次。 4. 需要额外的空间以节省时间。public static int[] A = new int[100];public static int f(int n){ if(n<=2

2021-07-21 16:34:11 86

原创 RocketMq——BrokerStartup启动流程以及注册broker至Namesrv

RocketMq——BrokerStartup启动流程以及注册broker至Namesrv1、创建controller2、进入BrokerController构造方法3、 controller.initialize();

2021-05-13 13:49:21 659 1

原创 RocketMq——NamesrvStartup启动流程分析

RocketMq——NamesrvStartup启动流程分析1、创建controller2、创建配置并设置端口3、创建NamesrvController对象3.1、进入NamesrvController构造方法RouteInfoManager包含如下属性BrokerHousekeepingService是一个基于netty事件的监听器4、NamesrvStartup启动4.1、controller.initialize();5、controller.start启

2021-04-29 14:35:43 261

转载 Netty心跳之IdleStateHandler作用原理

Netty心跳之IdleStateHandler作用原理Netty提供了对心跳机制的天然支持,心跳可以检测远程端是否存活,或者活跃今天我们就一起初识一下Netty4的心跳机制Netty4.0提供了一个类,名为IdleStateHandler,这个类可以对三种类型的心跳检测这个类的构造参数是这样的:前三个的参数解释如下:1)readerIdleTime:为读超时时间(即测试端一定时间内未接受到被测试端消息)2)writerIdleTime:为写超时时间(即测试端一定时间内向被测试端发送消息)

2021-04-26 17:04:08 1489

原创 Netty客户端启动后服务端接收消息的流程

Netty客户端启动后服务端接收消息的流程之前简单讲述了netty服务端启动的流程,客户端启动基本流程一致,今天我们简单介绍下服务端接收客户端发送的消息的过程1、看下服务端启动和接收客户端连接时pipeline的构建图2、客户端启动,处理select中事件2.1、获取unsafe对象,此时由于channel是NioServerSocketChannel,所以unsafe对象为NioMessageUnsafe类型2.2、调用NioMessageUnsafe的read方法2.3、调

2021-04-26 16:30:42 795

原创 RocketMq源码流程本地debug(一)——服务本地启动

RocketMq源码流程本地追踪本节简单讲述rokectmq本地调试步骤,后面会继续追踪代码流程1、git下载代码 https://gitee.com/apache/rocketmq2、启动namesrv代码中需设置rocketmqhome, 如下配置启动参数 ‐n localhost:9876 &启动成功3、启动broker配置参数‐n localhost:9876 ‐c E:\gitee\mq\rocketmq\distribution\confbroke

2021-04-16 16:26:50 271

原创 Netty服务端源码流程分析

Netty服务端源码流程分析本节将简单分析下netty服务端的创建过程1、服务端创建代码如下 EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { //创建服务器端的启动对象,配置参数 ServerBootstrap bootstra

2021-04-16 11:06:54 137 2

原创 NIO和BIO的区别与联系

NIO和BIO的区别1、BIO服务端样例2、NIO服务端样例3、区别与联系区别:NIO首次线程阻塞发生在select方法,且从线程池中获取线程后线程一定有数据去读。BIO首次阻塞方法发生在accept方法,但是从线程池中获取线程后线程不一定有数据去读,从而导致线程等待客户端发送数据,资源浪费中。。。联系:无论是NIO还是BIO在数据读取时,都是阻塞的,本质上真正的IO操作其实都是阻塞的...

2021-04-13 15:11:43 190

原创 ForkJoin任务窃取与本地任务执行

ForkJoin任务窃取与本地任务执行

2021-04-09 17:01:28 330

原创 spring异步调用注解@Async实现原理分析

spring异步调用注解@Async实现原理分析1、首先看下注解,可以加在类上,也可以加在方法上2、需要在启动类加上@EnableAsync注解导入了AsyncConfigurationSelector调用selectImports方法。默认会注入ProxyAsyncConfiguraion看下ProxyAsyncConfiguration类会创建一个后置处理器AsyncAnnotationBeanPostProcessor,看下这个后置处理器AsyncAnnotation

2021-04-02 15:36:43 595

原创 判断切面是否可以应用到当前类——AopUtils工具类使用

AopUtils工具类canApply的使用AopUtils是spring自带的工具类,我们可以使用它去判断某个类是否可以应用我们设计的切面advisor1、canApply方法源代码如下 public static boolean canApply(Advisor advisor, Class<?> targetClass) { return canApply(advisor, targetClass, false); } public static

2021-04-02 13:41:44 746

原创 ReentrantLock锁的底层实现流程——AQS源码追踪

ReentrantLock锁的底层实现流程1、首先看下几个重点的类图信息

2021-03-30 13:52:28 106

原创 HashMap源码追踪(1.8版本)——put方法流程追踪、扩容resize()、树化treeifyBin()

put方法流程追踪1、putpublic V put(K key, V value) { return putVal(hash(key), key, value, false, true); }进入resize方法2、resize图1新的阈值创建数组,赋值给table属性图2回到put方法,根据计算获取数组下标位置,并从table数组中取出Node节点如果不存在则创建新的节点对象图3第一次resize是进行了table的初始化赋值,此时进

2021-03-29 14:50:14 153

原创 配置中心(二)——springcloud集成nacos作为远程配置中心的底层实现

springcloud集成nacos作为远程配置中心之前我们分析了springcloud提供的默认的获取配置中心的客户端,本次分析下nacos如何与springcloud合作,获取nacos远程服务中的配置一、基本操作1、引入依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-ali

2021-03-25 16:48:09 287

原创 配置中心(一)——springcloud提供的获取远程配置入口、PropertySourceLocator解析

springcloud提供的获取远程配置中心的入口一、远程配置中心数据何时何地加载到项目中1、在跟踪代码之前我们先看看springcloud提供的PropertySourceLocator接口public interface PropertySourceLocator { PropertySource<?> locate(Environment environment);}这个接口就是其提供的入口,但是我们要知道它如何被加载到了spring环境2、首先就是cloud提

2021-03-24 17:22:36 1861

原创 负载均衡Ribbon源码追踪——RibbonLoadBalancerClient代替restTemplate执行execute方法

RibbonLoadBalancerClient初始化1、先看下两个自动配置类其中RibbonAutoConfiguration配置类创建了SpringclientFactory和LoadBanlancerClient即RibbonLoadBalancerClient注意:SpringClientFactory设置了configurations,这个configurations是配置类属性,且含有注解@Autowired,作用是加载RibbonClientSpecification类型的对象这

2021-03-23 17:30:53 571

原创 Eureka服务注册和发现的过程——EurekaAutoServiceRegistration

EurekaAutoServiceRegistration服务注册1、在EurekaClientAutoConfiguration配置类中,关注下EurekaAutoServiceRegistration类的创建看下EureakAutoServiceRegistration实现了SmartLifecycle,主要作用就是在spring创建对象后调用对象的start方法看下EureakAutoServiceRegistration的start方法进入注册方法maybeInitial

2021-03-23 11:09:13 1251

原创 注册中心——DiscoverClient初始化

服务注册与发现这段时间打算把springCloud的5大核心模块梳理下,分别为注册中心、配置中心、网关、熔断、负载均衡,本文简单介绍下服务注册发现的原理1、RPC远程调用框架的核心设计思想在于注册中心,因为注册中心管理服务与服务之间的依赖关系(即服务治理)2、什么是服务治理业务背景:订单服务调用...

2021-03-22 18:05:51 888

原创 linux根据端口查pid、项目路径

linux根据端口查pid、项目路径1、根据端口号查进程pidlsof -i:portnetstat -nap|grep port2、根据进程号查端口netstat -nap|grep pid3、根据进程pid查看服务路径ps -ef|grep java 查看进程pidll /proc/pid/cwd 查看服务安装路径...

2021-03-17 11:00:17 333

原创 ClassPathScanningCandidateComponentProvider工具类的使用(findCandidateComponents方法)

ClassPathScanningCandidateComponentProvider工具类的简单使用1、扫描包资源先简单的尝试下发现组件功能 public static void main(String[] args) throws Exception{ //1创建对象,参数先写false ClassPathScanningCandidateComponentProvider classPathScanningCandidateComponentProvider

2021-03-17 10:55:17 1461

原创 springboot启动(六)——onRefresh()方法,内嵌web容器(tomcat)启动

onRefresh()方法执行作用之前文章跟着代码依然可知,当前系统已加载了所有得bean得定义信息,包括自动配置得类1、进入方法createEmbeddedServletContainer private void createEmbeddedServletContainer() { EmbeddedServletContainer localContainer = this.embeddedServletContainer; ServletContext localServletCo

2021-03-15 09:19:04 1224 1

原创 springboot启动(五)——加载所有的自动配置类,@EnableAutoConfiguration 注解生效时机

加载所有的自动配置类,@EnableAutoConfiguration 注解生效时机上一篇文章我们跟踪代码看到了加载启动类目录下的bean的定义信息的过程,今天我们先分析下系统内置的自动配置类到底是啥时候加载进来的,因为tomcat等也是通过自动配置类先创建的工厂,后面才能讨论tomcat等容器的启动接上文this.doProcessConfigurationClass(configClass, sourceClass);方法(ConfigurationClassParser类中的方法)在使用co

2021-03-11 17:37:02 2024

原创 springboot启动(四)——refreshContext之invokeBeanFactoryPostProcessors方法作用

关于refresh和spring基本一致,之前的spring模块已有分析,此次只分析部分点refresh方法源代码protected void refresh(ApplicationContext applicationContext) { Assert.isInstanceOf(AbstractApplicationContext.class, applicationContext); ((AbstractApplicationContext) applicationContext).re.

2021-03-10 15:40:24 495

原创 springboot启动(三)——prepareContext的作用

prepareContext的作用1、应用初始化方法applyInitializers(context) protected void applyInitializers(ConfigurableApplicationContext context) { for (ApplicationContextInitializer initializer : getInitializers()) { Class<?> requiredType = GenericTypeResolver.

2021-03-09 15:35:36 1154

原创 springboot启动(二)——创建上下文环境createApplicationContext

创建上下文环境createApplicationContext1、接上文,当前进入SpringApplication对象方法run public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; FailureAnalyzer

2021-03-09 09:54:33 683 2

原创 springboot启动(一)——springApplication初始化

SpringApplication初始化今天开始看下springboot的代码流程,springboot给我的印象就是代码少,做的事不少啊,由于流程比较多,所以会分段介绍1、springboot标准启动入口进入run方法,首先就是初始化SpringApplication对象,其中souces就是入口类ConfigApplication2、调用SpringApplication构造方法进入initialize方法,主要就是给SpringApplication的5个属性进行赋值privat

2021-03-08 16:46:23 422 1

原创 spring启动过程的追踪(七)——@Autowired注解生效时机、spring创建对象doGetBean方法详细解析、spring三级缓存解决循环依赖

spring创建Bean得过程非常复杂,本文将分段进行解析,尽量阐述更加清晰1、finishBeanFactoryInitialization(beanFactory);spring创建得单实例对象,大部分是在这个方法里面进行创建的根据最后一行代码可知,其作用是实例化所有的非懒加载的单例对象2、循环遍历beanDefinitionNamespublic void preInstantiateSingletons() throws BeansException { List<Str.

2021-03-05 16:44:24 574

原创 spring启动过程的追踪(六)——initApplicationEventMulticaster初始化事件广播器

initApplicationEventMulticaster初始化事件广播器1、初始化应用事件广播器。这是观察者模式得典型应用。我们知道观察者模式由主题Subject和Observer组成。广播器相当于主题Subject,其包含多个监听器。当主题发生变化时会通知所有得监听器。protected void initApplicationEventMulticaster() { ConfigurableListableBeanFactory beanFactory = getBeanFactory()

2021-03-04 16:03:46 360 1

原创 spring中的工具类——GenericTypeResolver使用

泛型解析应用1、定义接口public interface MyInterface<T> { void testMethod(T event);}2、定义实现类public class MyImpl implements MyInterface<String>{ @Override public void testMethod(String event) { }}3、测试 public static void main(

2021-03-04 15:12:36 2308 5

原创 spring启动过程的追踪(五)——registerBeanPostProcessors注册后置处理器

registerBeanPostProcessors注册后置处理器对于方法执行的先后顺序可看之前文章一、在调用注册后置处理器方法之前我们先看看截至当前,服务内总共有哪些后置处理器,都是在什么时机下被放到容器的什么地方001 、加载系统默认beanDefinition 这个文章里面我们可以看到,首先加入的beanDefinition中有些是属于BeanPostProcessor类型的,当前beanFactory中信息如下,系统默认beanDefinition 存储在beanDefinitionMa

2021-03-04 10:35:22 198 1

原创 spring启动过程的追踪(四)——@Configuration、@ComponentScan注解生效时机

@Configuration、@ComponentScan注解生效时机上一篇文章spring启动加载内部beanDefinition清楚的展示了spring启动过程loadDefinitions信息,此时容器中只有系统内部类还有java配置类的定义信息,本文阐述invokeBeanFactoryPostProcessors(beanFactory);方法1、AbstractApplicationContext类的invokeBeanFactoryPostProcessors方法 protected

2021-03-03 17:29:13 1263 2

原创 spring启动过程的追踪(三)——加载默认的beanDefinition

spring容器注册默认的BeanDefinition上文(spring启动过程追踪(二))简单描述了注解版本spring容器启动的beanFactory的创建,本文将阐述AnnotationConfigWebApplicaitonContext在加载beanDefinitions时默认加载系统自定义的部分bean的定义信息根据代码可知loadBeanDefinitons方法内部创建了AnnotatedBeanDefinitionReader实例对象,进入构造函数可知最后调用了注解配置工具类,

2021-03-03 10:54:48 276

原创 spring启动过程的追踪(二)——创建beanFactory

AnnotationConfigWebApplicationContext的刷新方法分析上文简单的分析了web容器创建步骤,本文简要阐明spring启动的关键方法refresh方法1、AnnotationConfigWebApplicationContext的继承关系图AnnotationConfigWebApplicationContext >>AbstractRefreshableWebApplicationContext

2021-03-02 16:58:01 265

空空如也

空空如也

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

TA关注的人

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