Spring
文章平均质量分 78
Java部落格
为了部落!!!
展开
-
Spring Cloud Alibaba-Sentinel源码阅读(三)-流控原理
由上一篇《Spring Cloud Alibaba-Sentinel源码阅读(二)-流控的主流程》可知,Sentinel的流控主流程就是一条ProcessorSlot 处理链,调用 ProcessorSlotChain 的 entry 方法,就是依次调用这些ProcessorSlot 的方法。而流控相关的最重要的两个ProcessorSlot 就是StatisticSlot和FlowSlot。一、StatisticSlot 收集实时消息StatisticSlot#entrypublic void原创 2021-03-31 17:58:11 · 249 阅读 · 0 评论 -
Spring Cloud Alibaba-Sentinel源码阅读(二)-流控的主流程
一、流控的主流程1、流控的入口从上一篇《Spring Cloud Alibaba-Sentinel源码阅读(一)-Sentinel的使用》中可知,Sentinel流控的入口是SphU#entry方法,而SphU类据说是semaphore 信号量的缩写,这个SphU#entry方法的大概就是进入流控了,如果方法抛BlockException,则代表被流控了,如果正常返回一个Entry则正常放行。SphU#entry(java.lang.String, int, com.alibaba.csp.senti原创 2021-03-31 14:45:46 · 229 阅读 · 0 评论 -
Spring Cloud Alibaba-Sentinel源码阅读(一)-Sentinel的使用
一、调用sentinel-core API方式1、加入依赖<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.4.1</version></dependency>2、使用public static void main(String[]原创 2021-03-31 11:29:51 · 350 阅读 · 0 评论 -
Spring源码阅读(八)-设计模式
一、责任链模式1、DispatcherServlet#doDispatchgetHandler 方法的处理使用到了责任链模式,handlerMappings 是之前 Spring 容器初始化好的,通过遍历 handlerMappings 查找与 request 匹配的 Handler, 这里返回 HandlerExecutionChain 对象2、Spring AOPJdkDynamicAopProxy#invoke()方法核心代码:public Object invoke(Object pro原创 2021-03-07 22:11:10 · 192 阅读 · 1 评论 -
Spring自定义注解实战
JDK1.5开始引入了注解,Spring框架也正好把Java注解发挥得淋漓尽致,以下通过自定义一个日志注解@LogAnnotation,在被注解的方法执行前后打印日志,来深入了解Spring注解。一、创建自定义注解创建注解类LogAnnotationpackage com.ztesoft.bss.prod.cust.service.impl.annotation;import java.lang.annotation.Documented;import java.lang.annotatio原创 2021-02-26 13:55:03 · 287 阅读 · 0 评论 -
Mybatis源码阅读(三)-Spring集成Mybatis
一、DefaultSqlSession的线程安全问题从DefaultSqlSession类的注释可知,它不是一个线程安全的对象,通过DefaultSqlSessionFactory创建使用之后必须立即销毁,不能复用,只能局限于request或者方法的范围。而且在同一个Spring事务内的SqlSession只能有一个,所以Mybatis如果想集成到Spring就必须解决线程安全的问题!二、SqlSessionTemplateSqlSessionTemplate是Mybatis为了接入Spring提供原创 2021-01-29 21:27:49 · 107 阅读 · 0 评论 -
Mybatis源码阅读(四)-Spring集成Mybatis-Mapper接口的注入:MapperScannerConfigurer
一、Spring包扫描注解注入会过滤掉接口类在Spring IOC容器启动的过程中,Spring会在扫描@CompopnentScan指定的路径时,会将被@Component,@Service等注解的类自动注册BeanDefinition到Spring IOC容器中,但是会过滤掉接口、抽象类,无法生成BeanDefinition,具体的源码可以查看之前的一篇文章《Spring源码阅读(四)-注册BeanDefinition-ConfigurationClassPostProcessor》的第三点。但是M原创 2021-01-31 19:16:47 · 352 阅读 · 0 评论 -
SpringBoot 源码阅读(二)-启动
一、SpringBoot项目的两种启动方式SpringBoot项目的启动方式有两种,一种是以jar包的方式启动,一种是以war包的方式启动。二、jar包的方式启动启动类:@SpringBootApplicationpublic class MySpringbootApplication { public static void main(String[] args) { SpringApplication.run(MySpringbootApplication.clas原创 2021-01-21 11:07:45 · 114 阅读 · 2 评论 -
SpringBoot 源码阅读(一)-自动装配
一、自动装配直接看下自动装配流程图:二、自动装配的触发1、直接debug一下,通过调用堆栈信息,可以看到自动装配是由AbstractApplicationContext#invokeBeanFactoryPostProcessors()触发的。2、ConfigurationClassPostProcessor该类主要处理@Configuration注解的,它实现了BeanDefinitionRegistryPostProcessor, 那么也间接实现了BeanFactoryPostProces原创 2021-01-20 15:34:50 · 82 阅读 · 0 评论 -
Spring MVC源码阅读(三)-HandlerMapping
一、HandlerMapping的类图可以看到HandlerMapping家族有两个分支,分别是AbstractUrlHandlerMapping和AbstractHandlerMethodMapping,而我们熟知的RequestMappingHandlerMapping就是它的子类。二、HandlerMapping的加载RequestMappingHandlerMapping实现了InitializingBean接口,在其初始化时执行afterPropertiesSet方法。在此方法中其遍历Ap原创 2021-01-19 10:43:51 · 100 阅读 · 0 评论 -
Spring MVC源码阅读(二)-DispatcherServlet处理流程
一、 DispatcherServlet处理流程图二、DispatcherServlet#doDispatch等核心源码接下来看下DispatcherServlet的核心代码://经过精减的DispatcherServlet:public class DispatcherServlet extends FrameworkServlet { //DispatcherServlet分发请求 protected void doDispatch(HttpServletRequest requ原创 2021-01-18 16:35:38 · 75 阅读 · 0 评论 -
Spring源码阅读(七)-事务
一、InfrastructureAdvisorAutoProxyCreator先看下继承关系:原创 2021-01-17 15:37:23 · 126 阅读 · 0 评论 -
Spring源码阅读(六)-AOP
一、AnnotationAwareAspectJAutoProxyCreator1、先看下继承关系:2、AnnotationAwareAspectJAutoProxyCreator分别继承了BeanPostProcessor、InstantiationAwareBeanPostProcessor,所以AnnotationAwareAspectJAutoProxyCreator会有postProcessAfterInitialization()、postProcessBeforeInstantiatio原创 2021-01-16 17:20:27 · 127 阅读 · 0 评论 -
Spring源码阅读(五)-IOC
一、三级缓存1、单例bean在三级缓存中查找顺序如下:从DefaultSingletonBeanRegistry#getSingleton()源码中也可以看出:protected Object getSingleton(String beanName, boolean allowEarlyReference) { Object singletonObject = this.singletonObjects.get(beanName); if (singletonObject == null原创 2021-01-16 15:04:50 · 72 阅读 · 0 评论 -
Spring源码阅读(四)-注册BeanDefinition-ConfigurationClassPostProcessor
一、ConfigurationClassPostProcessor以零配置方式(即AnnotationConfigApplicationContext)启动的Spring,会注册一个ConfigurationClassPostProcessor,它的postProcessBeanDefinitionRegistry()方法就是通过解析配置类,注册BeanDefinition的!下面通过调用链和代码片段来看下这个BeanFactoryPostProcessor注册的地方。AnnotationConfigA原创 2021-01-11 19:37:27 · 164 阅读 · 0 评论 -
Spring源码阅读(三)-AbstractApplicationContext#invokeBeanFactoryPostProcessors
一、BeanFactoryPostProcessor1、BeanFactoryPostProcessor 接口是 Spring 初始化 BeanFactory 时对外暴露的扩展点,SpringIoC 容器允许 BeanFactoryPostProcessor 在容器实例化任何 bean 之前读取 bean 的定义,并可以修改它。2、BeanDefinitionRegistryPostProcessor 继承自 BeanFactoryPostProcessor,比BeanFactoryPostP原创 2021-01-11 15:50:01 · 129 阅读 · 0 评论 -
Spring源码阅读(二)-BeanFactory
一、AnnotationConfigApplicationContext和DefaultListableBeanFactory的关系AnnotationConfigApplicationContext的父类GenericApplicationContext包含了DefaultListableBeanFactory,如下图:后续ApplicationContext涉及到对Bean工厂的操作,其实操作的都是DefaultListableBeanFactory这个Bean工厂实现类。二、Defaul原创 2021-01-11 11:22:23 · 128 阅读 · 0 评论 -
Spring MVC源码阅读(一)-父子容器的加载
Spring父子容器在spring和springmvc进行整合的时候,需要加载父子容器:springIOC容器和springmvc容器,如下图:而这两个父子容器的加载则是从web.xml这个配置文件开始,web.xml文件中有两个重要的组件:ContextLoaderListener、DispatcherServlet。二、ContextLoaderListener加载父容器先看下其类的继承关系:而当Servlet容器(如Tomcat)在启动的时候会加载ServletContextListen原创 2020-12-21 14:17:04 · 224 阅读 · 0 评论 -
Spring源码阅读(一)-核心要点
一、BeanFactory和ApplicationContext的关系首先看下类图:由上图可知,BeanFactory是ApplicationContex的接口,主要是生成、获取bean;而ApplicationContex又拓展了许多高级特性,比如国际化、访问资源文件、事件发布、AOP等。二、Spring解决循环依赖的代码位置org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitia原创 2020-12-08 14:07:00 · 473 阅读 · 0 评论 -
SpringBoot如何省去Web.xml?
1、Web.xml 是Spring应用和Servlet联系的中介Servlet容器启动后,Servlet容器会根据web.xml中的配置初始化Spring容器。2、Servlet3.0奠定了SpringBoot 零xml配置的基础在Servlet3.0容器初始化时会调用jar包META-INF/services/javax.servlet.ServletContainerInitializer中指定的类的实现(javax.servlet.ServletContainerInitializer中的实现替原创 2020-05-16 11:14:03 · 652 阅读 · 1 评论 -
Spring MVC—web.xml 小结
web.xml组件结构1、listener:(springIOC_Context-父容器创建,再将其set进 servletContext)ContextLoaderListener -> ServletContextListener.contextInitialized(ServletContextEvent event)-> org.springframework.web....原创 2020-04-27 20:48:34 · 101 阅读 · 0 评论