源码解析
文章平均质量分 86
czb彬
如果还有机会,我希望只为自己而活。
展开
-
优化 spring cloud gateway+nacos时服务恢复调用太慢问题
在使用 spring cloud gateway + nacos 做服务发现时,会发现当下游的服务器恢复了,但是还有经过一段时间 gateway 才成功转发请求到刚恢复的下游服务上。于是我就深入源码进行企图通过修改相关配置的方式优化gateway服务发现的恢复时间。原创 2023-01-05 10:45:08 · 3726 阅读 · 0 评论 -
spring-security FilterSecurityInterceptor 源码分析
FilterSecurityInterceptor这个过滤器决定了访问特定路径应该具备的权限,访问的用户的角色,权限是什么?访问的路径需要什么样的角色和权限?这些判断和处理都是由该类进行的FilterSecurityInterceptorpublic class FilterSecurityInterceptor extends AbstractSecurityInterceptor implements Filter { //默认实现类:ExpressionBasedFilterInvocati原创 2020-12-25 13:55:31 · 577 阅读 · 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 · 132 阅读 · 0 评论 -
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 · 976 阅读 · 0 评论 -
Spring 5 PostProcessor 在ApplicationContext # refresh() 各阶段的作用
说明下面所有PostProcessor是按照执行方法顺序列出,所以有重复类名的情况所有的PostProcessor都支持 PriorityOrdered,OrderedBeanDefinitionRegistryPostProcessor方法void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)用途添加更多的bean定义,调用方法AbstartApplicationContext #原创 2020-09-15 17:46:15 · 489 阅读 · 0 评论 -
Spring 5 ApplicationContext#refresh() -- obtainFreshBeanFactory()源码解析
本文分析 AbstractApplicationContext 的 obtainFreshBeanFactory()/** * <p> * 获取新的Bean工厂: * <ol> * <li>调用供子类实现refreshBeanFactory()方法执行实际的配置加载</li> * <li>调用供子类实现的getBeanFactory()方法获取子类提供的Bean工厂</li原创 2020-09-09 10:11:47 · 247 阅读 · 0 评论 -
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 · 343 阅读 · 0 评论 -
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 · 219 阅读 · 0 评论 -
Spring 5 SimpleApplicationEventMulticaster 源码分析
SimpleApplicationEventMulticasterSimpleApplicationEventMulticaster 是 AbstractApplicationContext 的默认事件多播器/** * Simple implementation of the {@link ApplicationEventMulticaster} interface. * <p>简单实现的 ApplicationEventMulticaster 接口</p> * <p原创 2020-09-09 10:10:49 · 1369 阅读 · 0 评论 -
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 · 261 阅读 · 0 评论 -
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 · 1327 阅读 · 0 评论 -
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 · 168 阅读 · 0 评论 -
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 · 141 阅读 · 0 评论 -
Spring 5 AbstractBeanFactory -- getObjectFromFactoryBean 源码解析
AbstractBeanFactory 继承了 FactoryBeanRegistrySupport ,引用其实现方法 getObjectFromFactoryBean。FactoryBeanRegistrySupport # getObjectFromFactoryBean从BeanFactory对象中获取管理的对象.可根据shouldPostProcess对其对象进行该工厂的后置处理:如果factory管理的对象是单例 且 beanName已经在该BeanFactory的单例对象的高速缓存Map原创 2020-09-09 10:08:54 · 443 阅读 · 0 评论 -
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 · 322 阅读 · 0 评论 -
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 · 650 阅读 · 0 评论 -
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 · 458 阅读 · 0 评论 -
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 · 1219 阅读 · 0 评论 -
Spring 5 AbstractBeanFactory -- getMergedLocalBeanDefinition 源码解析
getMergedLocalBeanDefinition获取beanName合并后的本地RootBeanDefintiond优先从合并BeanDefinitionMap缓存【mergedBeanDefinitions】中获取,获取到的 RootBeanDefinition对象只要没有标记为重新合并定义的,都会返回出去获取beanName在该工厂所指的BeanDefinition对象,传入getMergedBeanDefinition(beanName,BeanDefinition) 方法,将该方法的原创 2020-09-07 17:47:01 · 717 阅读 · 0 评论 -
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 · 606 阅读 · 0 评论 -
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.csdn.net/qq_29229567/article/details/8077397原创 2020-09-07 17:46:20 · 449 阅读 · 0 评论 -
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 · 707 阅读 · 0 评论 -
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 · 259 阅读 · 0 评论 -
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 · 946 阅读 · 0 评论 -
Spring 5 AbstractAutowireCapableBeanFactory-- getTypeForFactoryMethod源码解析
AbstractAutowireCapableBeanFactory # resolveBeanClass从工厂方法确定给定bean定义的目标类型,仅在尚未为目标bean注册单例实例时调用:获取mbd的工厂方法返回类型【RootBeanDefinition#factoryMethodReturnType】,获取成功就返回出去定一个通用返回类型【变量commonType】,用于存储 经过比较 AutowireUtils#resolveReturnTypeForFactoryMethod方法的返回结果原创 2020-09-07 17:43:51 · 374 阅读 · 0 评论 -
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 · 676 阅读 · 0 评论 -
Spring 5 AbstractAutowireCapableBeanFactory-- createBeanInstance 源码解析
createBeanInstance(beanName, mbd, args);使用适当的实例化策略为指定的Bean创建一个新实例:工厂方法,构造函数自动装配或简单实例化。使用工厂方法(多个工厂方法时,会找到最匹配的那个构造函数),优先使用 args的参数值来实例化对象, 没有就使用mdb所定义的参数值使用构造函数:从SmartInstantiationAwareBeanPostProcessor中获取给定bean的候选构造函数 || mdb的解析自动注入模式为 按构造器自动装配 || mbd有原创 2020-09-05 15:13:22 · 195 阅读 · 0 评论 -
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 · 8878 阅读 · 0 评论 -
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 · 388 阅读 · 0 评论 -
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 · 262 阅读 · 0 评论 -
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 · 384 阅读 · 0 评论 -
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 · 316 阅读 · 0 评论 -
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 · 475 阅读 · 0 评论 -
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 · 254 阅读 · 0 评论 -
Spring 5 AutowireCapableBeanFactory -- resolveDependency源码分析(二)
Spring 5 AutowireCapableBeanFactory – resolveDependency源码分析(一)resolveMultipleBeans(descriptor, beanName, autowiredBeanNames, typeConverter);针对desciptor所包装的对象类型是[stream,数组,Collection类型且对象类型是接口,Map]的情况,进行解析与依赖类型匹配的 候选Bean对象,并将其封装成相应的依赖类型对象:获取包装的参数/字段的声.原创 2020-09-05 15:09:46 · 448 阅读 · 1 评论 -
Spring 5 AutowireCapableBeanFactory -- resolveDependency源码分析(一)
resolveDependency/** * <p>根据descriptor的依赖类型解析出与descriptor所包装的对象匹配的候选Bean对象</p> * Resolve the specified dependency against the beans defined in this factory. * <p>解析针对此工厂中定义的Bean的指定依赖关系</p> * @param descriptor the descripto原创 2020-09-04 10:17:48 · 617 阅读 · 1 评论 -
Spring 5 BeanDefinitionValueResolver 源码注释
/** * Helper class for use in bean factory implementations, * resolving values contained in bean definition objects * into the actual values applied to the target bean instance. * <p>在bean工厂实现中使用Helper类,它将beanDefinition对象中包含的值解析为应用于 * 目标bean实例的实原创 2020-09-04 10:17:23 · 548 阅读 · 0 评论 -
Spring 5 AbstractAutowireCapableBeanFactory-- applyPropertyValues源码解析
applyPropertyValues(String ,BeanDefinition ,BeanWrapper , PropertyValues )应用给定的属性值,解决任何在这个bean工厂运行时其他bean的引用。必须使用深拷贝,所以我们不会永久地修改这个属性/** * Apply the given property values, resolving any runtime references * to other beans in this bean factory. Must us原创 2020-09-04 10:17:03 · 667 阅读 · 0 评论 -
Spring 5 AbstractAutowireCapableBeanFactory -- populateBean源码解析(二)
Spring 5 AbstractAutowireCapableBeanFactory-- populateBean源码解析(一)autowireByType(beanName, mbd, bw, newPvs);通过bw的PropertyDescriptor属性类型,查找出对应的Bean对象,将其添加到pvs中/** * Abstract method defining "autowire by type" (bean properties by type) behavior. * &l.原创 2020-09-04 10:16:44 · 334 阅读 · 0 评论 -
Spring 5 AbstractAutowireCapableBeanFactory -- populateBean源码解析(一)
populateBean用来自 BeanDefinition的属性值填充给定的BeanWrapper中的bean实例/** * Populate the bean instance in the given BeanWrapper with the property values * from the bean definition. * <p>用来自 BeanDefinition的属性值填充给定的BeanWrapper中的bean实例</p> * @param原创 2020-09-04 10:16:20 · 260 阅读 · 0 评论