- 博客(67)
- 资源 (4)
- 收藏
- 关注
原创 优化 spring cloud gateway+nacos时服务恢复调用太慢问题
在使用 spring cloud gateway + nacos 做服务发现时,会发现当下游的服务器恢复了,但是还有经过一段时间 gateway 才成功转发请求到刚恢复的下游服务上。于是我就深入源码进行企图通过修改相关配置的方式优化gateway服务发现的恢复时间。
2023-01-05 10:45:08
4278
原创 如何将两个数合并成一个数又能恢复回原来两个数
前言如何将两个数合并成一个数又能恢复回原来两个数?这个问题在某次撸代码地时候忽然产生,当时没有想到如何时间,但最近忽然想到了思路,然后趁着这个五一假期实现一下。原理这个问题,可不能使用普通的加减乘除解决,因为即使合并得到新数,也无法恢复成之前合并前的那两个数,如 1+3=4,但是4可以有 2+2…很多种方式。我们可以采用二进制的方式解决这个问题。合并假设有两个数 1,3,在计算机语言里,默认是用 int 类型存放数值,一个 int 类型 有32 个位,将 1,3分别转成二进制可得到:000000
2021-05-03 17:40:54
2191
1
原创 Redis6.0 热门面试题及答案整理
Redis底层ZSet跳表是如何设计与实现的跳表【skipList】其实就是有层级的列表。比如我们想查找19,首先和6比较,大于6之后,在和9进行比较,然后在和12进行比较…最后比较到21的时候,发现21大于19,说明查找的点在17和21之间,从这个过程中,我们可以看出,查找的时候跳过了3、7、12等点。参考博客:https://blog.youkuaiyun.com/ict2014/article/details/17394259Redis底层ZSet实现压缩列表和跳表如何选择压缩列表:https://.
2021-01-26 08:57:25
1259
1
原创 Mybatis+Spring 时事务时交给谁处理的呢?
Mybatis+Spring 时事务时交给谁处理的呢?如果业务方法加上 @Transactional 时,是交给 Spring 处理。默认情况下,还是mybatis自己处理事务。源码证明在我们调用从 mybatis 代理出来的 mapper 接口时,其实调用 mybatis 的 MapperFactoryBean 对象,该对象是JVM代理对象,其InvocationHandler实现在SqlSessionTemplate中。public class SqlSessionTemplate implem
2021-01-06 11:21:38
905
3
原创 spring-security FilterSecurityInterceptor 源码分析
FilterSecurityInterceptor这个过滤器决定了访问特定路径应该具备的权限,访问的用户的角色,权限是什么?访问的路径需要什么样的角色和权限?这些判断和处理都是由该类进行的FilterSecurityInterceptorpublic class FilterSecurityInterceptor extends AbstractSecurityInterceptor implements Filter { //默认实现类:ExpressionBasedFilterInvocati
2020-12-25 13:55:31
637
2
原创 Spring 如何解决循环依赖
核心成员变量DefaultSingletonBeanRegistry:/** * Cache of singleton objects: bean name to bean instance. * <p>单例对象的高速缓存:beam名称-bean实例,所有bean对象最终都会放到对象中</p> * */private final Map<String, Object> singletonObjects = new ConcurrentHashMap<&g
2020-11-17 15:01:37
151
原创 超大文本处理框架
超大文本处理框架简介关于查找读取用法maven 配置用例开源地址简介这个一个针对超大文本文件的处理框架,适合那些超过100M的文本文件,如日志文件。该文件是按指定容器字符数来处理文本内容,所以最大程度避免了操作这些大文本文件时的OOM问题。这种按指定容器字符数读取到内容我统一位段。关于查找读取在读取文本的时候,会推断读取的文本的尾部有没有 要查找的字符串 的开头部分, 有就需要将 要查找的字符串剩余的字符读取到该段文字里为了尽可能保证读取不会因为读取策略导致OOM的问题,合适的段长度应该为
2020-11-17 14:17:14
702
原创 Spring 中 Mybatis 的 Mapper 层的实例是怎么来的?
@MapperScan在 @MapperScan 注解中,引入了一个 MapperScannerRegistrar 注册器@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(MapperScannerRegistrar.class)@Repeatable(MapperScans.class)public @interface MapperScan { ...}MapperScann
2020-09-16 12:58:41
1022
原创 Spring 5 PostProcessor 在ApplicationContext # refresh() 各阶段的作用
说明下面所有PostProcessor是按照执行方法顺序列出,所以有重复类名的情况所有的PostProcessor都支持 PriorityOrdered,OrderedBeanDefinitionRegistryPostProcessor方法void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)用途添加更多的bean定义,调用方法AbstartApplicationContext #
2020-09-15 17:46:15
524
原创 不需要重启服务的热修复框架
这个一个基于Spring的热修复框架,该框架不需要重启服务,是一个针对特殊生产环境的热修复框架。与dev-tool不一样,该框架不需要刷新Spring容器,也不监听class文件的变化,也不需要覆盖原有的class文件。原理本框架都建立在破坏双亲委派机制czb.framework.hotfix.core.classloader.HotFixClassLoader去加载热修复class文件。基本原则由于 JAVA 的安全机制认为 不同的ClassLoader之间就算加载了同一个类,也不可以认为这个类
2020-09-15 16:27:35
544
原创 Spring 5 ApplicationContext#refresh() -- obtainFreshBeanFactory()源码解析
本文分析 AbstractApplicationContext 的 obtainFreshBeanFactory()/** * <p> * 获取新的Bean工厂: * <ol> * <li>调用供子类实现refreshBeanFactory()方法执行实际的配置加载</li> * <li>调用供子类实现的getBeanFactory()方法获取子类提供的Bean工厂</li
2020-09-09 10:11:47
281
原创 Spring 5 PostProcessorRegistrationDelegate 源码解析
/** * Delegate for AbstractApplicationContext's post-processor handling. * <p>委托AbstractApplicationContext进行后置处理器处理</p> * @author Juergen Hoeller * @since 4.0 */final class PostProcessorRegistrationDelegate { private PostProcessorRegist
2020-09-09 10:11:29
392
原创 Spring 5 UiApplicationContextUtils 源码分析
UiApplicationContextUtils:用于UI应用程序上下文实现的实用程序类。提供对名为’themeSource’ 的特殊Bean的支持,该Bean类型为 themeSource/** * Utility class for UI application context implementations. * Provides support for a special bean named "themeSource", * of type {@link org.springframew
2020-09-09 10:11:08
250
原创 Spring 5 SimpleApplicationEventMulticaster 源码分析
SimpleApplicationEventMulticasterSimpleApplicationEventMulticaster 是 AbstractApplicationContext 的默认事件多播器/** * Simple implementation of the {@link ApplicationEventMulticaster} interface. * <p>简单实现的 ApplicationEventMulticaster 接口</p> * <p
2020-09-09 10:10:49
1442
原创 Spring 5 ApplicationContext#refresh() -- 深入源码解析(一)
在Spring的众多 ApplicationContext 实现类最终的 refresh(),还是 AbstractApplicationContext 实现主体代码,附加功能基本都是在onRefresh() 上附加。所以我直接围绕 AbstractApplicationContext 的 refresh() 进行解析。AbstractApplocationContext.refresh@Override public void refresh() throws BeansException, Il
2020-09-09 10:10:30
299
原创 Spring 5 DefaultLifecycleProcessor 源码分析
DefaultLifecycleProcessor 是 AbstractApplicationContext 的 LifecycleProcessor 策略的默认实现,主要自动启动/停止BeanFactory中的所有实现 Lifecycle 的单例Bean对象LifecycleProcessor/** * Strategy interface for processing Lifecycle beans within the ApplicationContext. * <p>在 App
2020-09-09 10:10:08
1403
原创 Spring 5 ApplicationContext#refresh() --finishRefresh 源码解析
finishRefresh()/** * <p>完成刷新 * Finish the refresh of this context, invoking the LifecycleProcessor's * onRefresh() method and publishing the * {@link org.springframework.context.event.ContextRefreshedEvent}. * <p>调用 LifecycleProcesso
2020-09-09 10:09:48
211
原创 Spring 5 ApplicationContext#refresh() -- 深入源码解析(二)
Spring 5 ApplicationContext#refresh() – 深入源码解析(一)initApplicationEventMulticaster()/** * Initialize the ApplicationEventMulticaster. * <p>初始化ApplicationEventMulticaster</p> * Uses SimpleApplicationEventMulticaster if none defined in th.
2020-09-09 10:09:28
168
原创 Spring 5 AbstractBeanFactory -- getObjectFromFactoryBean 源码解析
AbstractBeanFactory 继承了 FactoryBeanRegistrySupport ,引用其实现方法 getObjectFromFactoryBean。FactoryBeanRegistrySupport # getObjectFromFactoryBean从BeanFactory对象中获取管理的对象.可根据shouldPostProcess对其对象进行该工厂的后置处理:如果factory管理的对象是单例 且 beanName已经在该BeanFactory的单例对象的高速缓存Map
2020-09-09 10:08:54
487
原创 Spring 5 AbstractBeanFactory -- getObjectForBeanInstance 源码解析
getObjectForBeanInstance(sharedInstance, name, beanName, null);从 beanInstannce 中获取公开的Bean对象,主要处理beanInstance是FactoryBean对象的情况,如果不是FactoryBean会直接 返回beanInstance实例/** * Get the object for the given bean instance, either the bean * instance itself or it
2020-09-09 10:08:12
364
原创 Spring 5 DefaultSingletonBeanRegistry -- getSingleton(String,ObjectFactory) 源码解析
getSingleton(String,ObjectFactory)返回以beanName的(原始)单例对象,如果尚未注册,则使用singletonFactory创建并注册一个对象如果beanName为null,抛出异常使用单例对象的高速缓存Map作为锁,保证线程同步从单例对象的高速缓存Map中获取beanName对应的单例对象【变量 singletonObject】,获取成功就直接返回singletonObject如果singletonObject获取不到如果当前在destorySingl
2020-09-07 17:48:18
718
原创 Spring 5 ContextTypeMatchClassLoader 源码分析
ContextTypeMatchClassLoader :覆盖ClassLoader的特殊变体,用于AbstractApplicationContext中的临时类型匹配。 为每个loadClass调用从缓存的字节数组中重新定义类,以便在父类ClassLoader中拾取 最近加载的类型。ContextTypeMatchClassLoader/** * Special variant of an overriding ClassLoader, used for temporary type * matc
2020-09-07 17:47:59
502
原创 Spring 5 AbstractBeanFactory -- resolveBeanClass源码解析
AbstractBeanFactory#resolveBeanClass为mdb解析出对应的bean class:如果mbd指定了bean class,就直接返回该bean class调用doResolveBeanClass(mbd, typesToMatch)来解析获取对应的bean Class对象然后返回出去。如果成功获取到 系统的安全管理器,使用特权的方式调用。捕捉PrivilegedActionException,ClassNotFoundException异常和LinkageError错
2020-09-07 17:47:25
1278
原创 Spring 5 AbstractBeanFactory -- getMergedLocalBeanDefinition 源码解析
getMergedLocalBeanDefinition获取beanName合并后的本地RootBeanDefintiond优先从合并BeanDefinitionMap缓存【mergedBeanDefinitions】中获取,获取到的 RootBeanDefinition对象只要没有标记为重新合并定义的,都会返回出去获取beanName在该工厂所指的BeanDefinition对象,传入getMergedBeanDefinition(beanName,BeanDefinition) 方法,将该方法的
2020-09-07 17:47:01
803
原创 Spring 5 AbstractBeanFactory-- getType源码解析
getType(factoryBeanName);确定具有给定名称的bean类型(为了确定其对象类型,默认让FactoryBean以初始化)。由 AbstractBeanFactory 实现 。/** * 确定具有给定名称的bean类型(为了确定其对象类型,默认让FactoryBean以初始化)。 * * @param name the name of the bean to query -- 要查询的bean名 * @return Bean的类型;如果不确定,则为null * @
2020-09-07 17:46:41
668
原创 Spring 5 ReflectionUtils 源码注释
/** * Simple utility class for working with the reflection API and handling * reflection exceptions. * 简单的实用程序,用于实用反射API和处理反射异常 * <p>Only intended for internal use. 仅供内部使用 * <p>参考博客:https://blog.youkuaiyun.com/qq_29229567/article/details/8077397
2020-09-07 17:46:20
499
原创 Spring 5 ParameterNameDiscoverer 源码注释
ParameterNameDiscoverer这个 Spring 用于寻找现方法和构造函数的参数名的发现器。/** * Interface to discover parameter names for methods and constructors. * <p>用于发现方法和构造函数的参数名的接口</p> * <p>Parameter name discovery is not always possible, but various strategies
2020-09-07 17:45:40
809
原创 Spring 5 ClassUtils 源码注释
/** * Miscellaneous {@code java.lang.Class} utility methods. * Mainly for internal use within the framework. * <p> * 其他的{@code java.lang.Class}使用方法。 * 主要供框架内部使用 * </p> * @author Juergen Hoeller * @author Keith Donald * @author
2020-09-07 17:45:18
292
原创 Spring 5 ResolvableType 源码注释
/** * <p>可以看作是封装JavaType的元信息类</p> * Encapsulates a Java {@link java.lang.reflect.Type}, providing access to * {@link #getSuperType() supertypes}, {@link #getInterfaces() interfaces}, and * {@link #getGeneric(int...) generic parameters} alon
2020-09-07 17:44:45
1012
原创 Spring 5 AbstractAutowireCapableBeanFactory-- getTypeForFactoryMethod源码解析
AbstractAutowireCapableBeanFactory # resolveBeanClass从工厂方法确定给定bean定义的目标类型,仅在尚未为目标bean注册单例实例时调用:获取mbd的工厂方法返回类型【RootBeanDefinition#factoryMethodReturnType】,获取成功就返回出去定一个通用返回类型【变量commonType】,用于存储 经过比较 AutowireUtils#resolveReturnTypeForFactoryMethod方法的返回结果
2020-09-07 17:43:51
418
原创 Spring 5 ConstructorResolver 源码注释
/** * Delegate for resolving constructors and factory methods. * <p>代表解析构造函数和工厂方法</p> * <p>Performs constructor resolution through argument matching. * <p>通过参数匹配执行构造函数解析</p> * * @author Juergen Hoeller * @author Rob Har
2020-09-05 15:13:45
706
原创 Spring 5 AbstractAutowireCapableBeanFactory-- createBeanInstance 源码解析
createBeanInstance(beanName, mbd, args);使用适当的实例化策略为指定的Bean创建一个新实例:工厂方法,构造函数自动装配或简单实例化。使用工厂方法(多个工厂方法时,会找到最匹配的那个构造函数),优先使用 args的参数值来实例化对象, 没有就使用mdb所定义的参数值使用构造函数:从SmartInstantiationAwareBeanPostProcessor中获取给定bean的候选构造函数 || mdb的解析自动注入模式为 按构造器自动装配 || mbd有
2020-09-05 15:13:22
227
原创 Spring 5 MethodParameter 源码注释
/** * Helper class that encapsulates the specification of a method parameter, i.e. a {@link Method} * or {@link Constructor} plus a parameter index and a nested type index for a declared generic * type. Useful as a specification object to pass along. *
2020-09-05 15:12:55
9058
原创 Spring 5 ConstructorResolver源码注释
/** * Delegate for resolving constructors and factory methods. * <p>代表解析构造函数和工厂方法</p> * <p>Performs constructor resolution through argument matching. * <p>通过参数匹配执行构造函数解析</p> * * @author Juergen Hoeller * @author Rob Har
2020-09-05 15:12:30
441
原创 Spring 5 AutowireCandidateResolver源码注释
UMLAutowireCandidateResolver** * Strategy interface for determining whether a specific bean definition * qualifies as an autowire candidate for a specific dependency. * <p>用于确定特定beanDefinition是否有资格作为特定依赖项的自动装配候选的策略接口</p> * @author Juerge
2020-09-05 15:12:07
301
原创 Spring 5 SimpleTypeConverter 源码注释
SimpleTypeConverter/** * <p>不在特定目标对象上运行的TypeConverter接口的简单实现。这是使用完整的BeanWrapperImpl实例来实现 * 任意类型转换需求的替代方法,同时使用相同的转换算法(包括委托给PropertyEditor和ConversionService)。</p> * Simple implementation of the {@link TypeConverter} interface that does not op
2020-09-05 15:11:42
419
原创 Spring 5 DefaultListableBeanFactory-- isAutowireCandidate源码分析
isAutowireCandidate(String , DependencyDescriptor )确定指定的bean定义是否可以自动注入:获取此BeanFactory的自动装配候选解析器交由isAutowireCandidate(String, DependencyDescriptor, AutowireCandidateResolver) 处理并将结果返回出去/** * 确定指定的bean定义是否可以自动注入 * @param beanName the name of the be
2020-09-05 15:11:15
351
原创 Spring 5 OrderComparator 源码注释
UMLOrderComparator/** * {@link Comparator} implementation for {@link Ordered} objects, sorting * by order value ascending, respectively by priority descending. * <p>有序对象的比较实现,按顺序值升序或优先级降序排序.</p> * <h3>{@code PriorityOrdered} Object
2020-09-05 15:10:52
509
原创 Spring 5 DefaultListableBeanFactory-- adaptOrderComparator源码分析
adaptOrderComparator(Map<String, ?> )构建排序比较器,用于对matchingBean的所有bean对象进行优先级排序:获取该工厂的依赖关系比较器【变量 dependencyComparator】,SpringBoot默认 使用【org.springframework.core.annotation.AnnotationAwareOrderComparator】如果dependencyComparator是OrderComparator的实例,就让com
2020-09-05 15:10:15
291
原创 Spring 5 AutowireCapableBeanFactory -- resolveDependency源码分析(二)
Spring 5 AutowireCapableBeanFactory – resolveDependency源码分析(一)resolveMultipleBeans(descriptor, beanName, autowiredBeanNames, typeConverter);针对desciptor所包装的对象类型是[stream,数组,Collection类型且对象类型是接口,Map]的情况,进行解析与依赖类型匹配的 候选Bean对象,并将其封装成相应的依赖类型对象:获取包装的参数/字段的声.
2020-09-05 15:09:46
482
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人