2020
10-10
10-10
Spring教程之refresh()执行逻辑浅析
前言对于AbstractApplicationContex#refresh()方法逻辑,可所谓是贯通spring框架核心逻辑,溪源在debug过程中,理解起来也是懵懵懂懂,自己也买了《Spring源码深度解析》书籍学习其思想和实现逻辑,经过不断的整理学习总结,最终诞生这篇文章,方便后面自己忘记了查看和理解。下面开始正式踏入refresh方法的整体概览浅析。概览refresh该方法是SpringBean加载的核心,它是ClassPathXmlApplicationContext的父类AbstractApplic...
继续阅读 >
一、概述SpringBatch是一个轻量级,全面的批处理框架。一个典型的批处理过程可能是:从数据库,文件或队列中读取大量记录。以某种方式处理数据。以修改之后的形式写回数据SpringBatch应用架构图:一个Batch(批处理)过程由一个Job(作业)组成。这个实体封装了整个批处理过程。一个Job(作业)可以由一个或多个Step(步骤)组成。在大多数情况下,一个步骤将读取数据(通过ItemReader),处理数据(使用ItemProcessor),然后写入...
【前言】 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性能同时又能在出现问题时打印详细的信息来快速定位问题;最近研究一下SpringBootAdmin中动态日志级别调整,并集成项目中,在此与大家共享;【动态修改日志级别】 一、生产环境日志输出的状况 ...
【前言】程序开发完实现相应的功能只是一个部分,如何让系统在线上运行更好创造更高的价值是另外一个部分;监控是一个生产级项目避不可少重要组成部分;最近研究一下针对SpringBoot的监控项目---SpringBootAdmin,并集成项目中,在此与大家共享;【SpringBootAdmin】一、SpringBootAdmin简介1、github地址:https://github.com/codecentric/spring-boot-admin2、重要功能列表:二、项目中集成SpringBootAdmin1、搭建SpringBootAd...
背景:今天写代码遇到一个Controller中的线程安全问题,那么Spring的Controller是单例还是多例的呢?若为单例又如何保证并发安全呢?一、面试回答Spring管理的Controller,即加入@Controller注入的类,默认是单例的,因此建议:1、不要在Controller中定义成员变量;(单例非线程安全,会导致属性重复使用)2、若必须要在Controller中定义一个非静态成员变量,则通过注解@Scope("prototype"),将其设置为多例模式。二、验证Co...
前言最近开发了一个接口,完成后准备自测时,却被拦截器拦截了,提示:(AUTH-NO)未能获得有效的请求参数!怎么会这样呢?于是我全局搜了这个提示语,结果发现它被出现在一个Aspect类当中了,并且把一个@interface作为了一个切点,原来这里利用了SpringAOP面向切面的方式进行权限控制。正文SpringAOP即面向切面,是对OOP面向对象的一种延伸。AOP机制可以让开发者把业务流程中的通用功能抽取出来,单独编写功能代码。在业务流程...
Spring和SpringMVC的容器具有父子关系,Spring容器为父容器,SpringMVC为子容器,子容器可以引用父容器中的Bean,而父容器不可以引用子容器中的Bean。了解了Spring与SpringMVC父子容器的关系,接下来让我们看看Spring与SpringMVC容器的初始化过程。以下讲解使用的web.xml文件如下:<context-param><param-name>contextConfigLocation</param-name>//指定springioc配置文件的位置<param-value>classpath*:spring/*.xml</p...
前言在使用Spring和SpringMVC的老版本进行开发时,我们需要配置很多的xml文件,非常的繁琐,总是让用户自行选择配置也是非常不好的。基于约定大于配置的规定,Spring提供了很多注解帮助我们简化了大量的xml配置;但是在使用SpringMVC时,我们还会使用到WEB-INF/web.xml,但实际上我们是完全可以使用Java类来取代xml配置的,这也是后来SpringBoott的实现原理。本篇就来看看Spring是如何实现完全的零XML配置。正文先来看一下原始的we...
前言Spring已经是我们JavaWeb开发必不可少的一个框架,其大大简化了我们的开发,提高了开发者的效率。同时,其源码对于开发者来说也是宝藏,从中我们可以学习到非常优秀的设计思想以及优雅的命名规范,但因其体系庞大、设计复杂对于刚开始阅读源码的人来说是非常困难的。所以在此之前首先你得下定决心,不管有多困难都得坚持下去;其次,最好先把设计模式掌握熟练;然后在开始阅读源码时一定要多画UML类图和时序图,多问自己为什...
前言在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的。同时我们常用的注解如:@Service、@Component、@Controller标注的类也是需要在xml中配置<context:component-scan>才能自动注入到IOC容器中,所以本篇也会重点分析注解解析原理。正文自定义标签解析原理在上一篇分析默认标签解析时看到过这个类DefaultBeanDefinitionDocumentRea...
前言通过之前的几篇文章将Spring基于XML配置的IOC原理分析完成,但其中还有一些比较重要的细节没有分析总结,比如循环依赖的解决、作用域的实现原理、BeanPostProcessor的执行时机以及SpringBoot零配置实现原理(@ComponentScan、@Import、@ImportSource、@Bean注解的使用和解析)等等。下面就先来看看循环依赖是怎么解决的,在此之前一定要熟悉整个Bean的实例化过程,本篇只会贴出关键性代码。正文循环依赖首先来看几个问题:什么...
熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton、prototype、request、session、globalsession。如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。今天要介绍的是这五种中的前两种,也是Spring最初提供的beanscopesingleton和prototype。Spring官方文档介绍如下图:更多内容可以看官方文档介绍,非常详细:https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.ht...
前言AOP,也就是面向切面编程,它可以将公共的代码抽离出来,动态的织入到目标类、目标方法中,大大提高我们编程的效率,也使程序变得更加优雅。如事务、操作日志等都可以使用AOP实现。这种织入可以是在运行期动态生成代理对象实现,也可以在编译期、类加载时期静态织入到代码中。而Spring正是通过第一种方法实现,且在代理类的生成上也有两种方式:JDKProxy和CGLIB,默认当类实现了接口时使用前者,否则使用后者;另外SpringAOP...