
spring
文章平均质量分 67
chuixue24
这个作者很懒,什么都没留下…
展开
-
超详细解释MyBatis与Spring的集成原理
Spring集成Mybatis时,有几个关键对象,弄清楚这几个关键对象,也就清楚是如何集成的了。该对象用于向Spring容器注册SqlSessionFactory的bean,所以Spring集成MyBatis时,SqlSessionFactory存在于Spring容器中,生命周期与Spring应用一致。转载 2024-12-26 18:17:19 · 126 阅读 · 0 评论 -
spring原理&集成mybatis
原创 2023-04-28 09:58:54 · 107 阅读 · 0 评论 -
SmartInstantiationAwareBeanPostProcessor
BeanPostProcessor是spring的bean后置处理器,这个接口定义了两个方法分别在bean的初始化前、初始化后执行。InstantiationAwareBeanPostProcessor继承自BeanPostProcessor,添加了两个方法,这两个方法分别在bean的实例化前、实例化后执行。SmartInstantiationAwareBeanPostProcessor又继承自InstantiationAwareBeanPostProcessor,添加了几个方法,其中有...原创 2022-01-15 14:24:13 · 3480 阅读 · 0 评论 -
spring系列16:循环依赖
前言上篇介绍了Spring是如何完成自动装配,但是,如果程序员这样配置BeanA.javapackage com.playwin.bean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class A { @Autowired private B b;}...转载 2022-01-15 14:23:09 · 213 阅读 · 0 评论 -
spring系列15:自动装配
前言上篇简述了Spring如何实例化Bean,在实例化Bean之后还能干嘛,当然是属性注入,这篇分析一下Spring如何对属性自动装配。代码A.javapackage com.playwin.bean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.spri...转载 2022-01-15 14:22:48 · 216 阅读 · 0 评论 -
spring系列14:实例化Bean
前言registerBeanPostProcessors之后,Spring要开始准备实例化Bean。不过在这之前,Spring初始化了非常多的内部组件。// 国际化消息组件initMessageSource();// Initialize event multicaster for this context.// 初始化事件监听多路广播器initApplicationEventMulticaster();// Initialize other special beans in...转载 2022-01-15 14:22:16 · 246 阅读 · 0 评论 -
spring系列13:PostProcessorRegistrationDelegate
PostProcessorRegistrationDelegate是spring中很重要的一个类,其中的方法见下图:PostProcessorRegistrationDelegate是一个标记为final的类,表示不可以修改,其中的方法均是静态方法,权限访问修饰符为默认的,可以将其当做一个工具类,在spring的AbstractApplicationContext类中会调用到这个工具类:用来注册和调用BeanFactory后置处理、注册Bean后置处理器。...原创 2022-01-15 14:21:58 · 928 阅读 · 0 评论 -
spring系列12:registerBeanPostProcessors
前言执行了BeanFactory后置处理器后,Spring开始准备实例化Bean。在这之前,Spring先添加Bean后置处理器BeanPostProcessor,因为BeanPostProcessor会在实例化Bean使用,所以在这之前实例化,不管是Spring内置的,还是程序员提供的,都会在这一步添加到BeanFactory。registerBeanPostProcessorsprotected void registerBeanPostProcessors(...转载 2022-01-15 14:21:23 · 292 阅读 · 0 评论 -
spring系列11:ConfigurationClassPostProcessor
前言前面分析了Spring如何执行BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor接口中的方法,也就是BeanFactory后置处理器什么时候执行。Spring的默认BeanFactory后置处理器有几个,但有一个BeanFactory后置处理器不得不提,那就是ConfigurationClassPostProcessor,可以说它是Spring做重要的BeanFactory后置处理器,没有之...转载 2022-01-15 14:20:45 · 187 阅读 · 0 评论 -
spring系列10:BeanFactory 后置处理器的调用
前言在prepareRefresh方法之后,Spring开始执行与BeanFactory相关操作,其中一个非常重要的点就是执行BeanFactory后置处理器。BeanFactory后置处理器是怎么开始执行?又为什么在这里调用BeanFactory后置处理器?源码中会告诉我们答案。obtainFreshBeanFactory()ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()...转载 2022-01-15 14:19:34 · 551 阅读 · 0 评论 -
spring系列9:prepareRefresh
前言看了refresh里各个方法之后,简单了解了各个方法的作用。当然不能只了解就行,想要了解Spring容器,细品是必须的。当然Spring这么庞大,不可能一两篇文章就能解释的清楚。那么就从prepareRefresh方法开始。源码protected void prepareRefresh() { // 记录容器开始初始化时间 this.startupDate = System.currentTimeMillis(); // 切换容器为初始化状态 ...转载 2022-01-14 15:03:12 · 236 阅读 · 0 评论 -
spring系列8:refresh
前言Spring在无参构造方法初始化一个解析器,和一个扫描器之后,开始解析用户传入的配置(类或XML,类有可能不是配置类)。Spring在前面这一步默认获得配置信息,并初步解析,之后,便开始正在初始化容器。public AnnotationConfigApplicationContext(Class<?>... componentClasses) { // 初始化解析器和扫描器 this(); // 注册一个配置类 register(componentC..转载 2022-01-14 15:01:55 · 157 阅读 · 0 评论 -
spring系列7:register
前言前面简单介绍了Spring是什么时候加载默认的五个BeanFactory后置处理器,可能你看得云里雾里,不知其所为何用。这篇文章也并没有解释这个五个后置处理器的作用,而是分析在this()之后的register()方法。一步步紧跟Spring步伐。public AnnotationConfigApplicationContext(Class<?>... componentClasses) { this(); register(componentClass...转载 2022-01-14 15:00:37 · 983 阅读 · 0 评论 -
spring系列6:默认PostProcessor的加载
前言做了几章的铺垫,介绍了BeanDefinition,BeanFactory,PostProcessor。那么这三样是如何串联在一起,PostProcessor又是怎么调用的呢?在说PostProcessor怎么调用的之前,先说说是Spring怎么加载默认的PostProcessor。PostProcessor以注解配置方式来分析。加载 PostProcessor一开始,往AnnotationConfigApplicationContext类添加一个注解配置类相信大家...转载 2022-01-14 14:55:29 · 221 阅读 · 0 评论 -
spring系列5:PostProcessor(后置处理器)
前言前面介绍Spring的基石:BeanDefinition。以及BeanDefinition的管理者:BeanFactory,还有一个BeanDefinition注册接口:BeanDefinitionRegistry。这些相当于工具,那谁来操作这些工具呢?幕后的操作者就是Spring中后置处理器(PostProcessor)。后置处理器分为两种:BeanFactoryPostProcessor(Bean 工厂后置处理器)和BeanPostProcessor(Bean 后...转载 2022-01-14 14:53:00 · 735 阅读 · 0 评论 -
spring系列4:BeanDefinitionRegistry
前言上篇介绍了BeanDefinition的管理者BeanFactory。如果你仔细看过BeanFactory里面的接口,你会发现,接口中并没有提供往BeanFactory中添加BeanDefinition的方法,那么这一步由谁来做呢?这一步,Spring又提供了一个接口:BeanDefinitionRegistryBeanDefinitionRegistry接口public interface BeanDefinitionRegistry extend...转载 2022-01-14 14:51:20 · 567 阅读 · 0 评论 -
spring系列3:BeanFactory
前言前面简单介绍了Spring的基石:BeanDefinition。BeanDefinition记录一个Bean的所有信息,说到底,它最终的任务是被用来实例化一个Bean。那么谁来管理这些BeanDefinition和实例化一个Bean?Spring使用了BeanFactory管理和实例化这些BeanDefinition。BeanFactory接口public interface BeanFactory { String FACTO...转载 2022-01-14 14:50:10 · 241 阅读 · 0 评论 -
spring系列2:BeanDefinition(下)
前言前面上篇介绍了BeanDefinition接口,Spring对其Bean的定义。竟然已经对Bean建模了,那么接下来就是具体实现。这篇就是介绍主要的实现类。AbstractBeanDefinitionAbstractBeanDefinition是BeanDefinition的直接实现类,从类名也知道,它是一个抽象的BeanDefinition,还不够具体。AbstractBeanDefinition已经对BeanDefinition方法有了基本...转载 2022-01-14 14:48:52 · 206 阅读 · 0 评论 -
spring系列1:BeanDefinition(上)
前言学习到Java Web的时候都听过一个概念:Bean,你可以说Bean是一个对象,但不可以说一个对象是一个Bean。个人对Bean的理解就是:某一个特定的领域对其特定要求对象的统称。就好比你在学校读书时,身边的同学有的叫小明,有的叫小东,还有的叫小花(这些可以比作的类名),但你和他们在学校里都有一个统称:学生。这个学生的称呼就类似Bean。学校里有学生,教师,校长,都是人,但不是每个人都是学生;Java 里也一样,有类名,是个对象,但不一定是个Bean。你在学校被称为学生,但你...转载 2022-01-14 14:46:21 · 225 阅读 · 1 评论 -
ApplicationContextAwareProcessor
ApplicationContextAwareProcessor是一个bean后置处理器,用来处理用到的感知接口(实现spring中aware结尾的接口),其源码中有个方法:用来注入一些组件。比如平时用到的ApplicationContextAware接口,实现后可以使用applicationContext对象,其就是靠这个方法注入的。...原创 2022-01-14 14:27:49 · 729 阅读 · 0 评论 -
spring中bean的生命周期
转载 2021-12-27 20:57:57 · 114 阅读 · 0 评论 -
dubbo系列四:Spring与Dubbo整合原理与源码分析
整体架构和流程应⽤启动类与配置 public class Application { public static void main(String[] args) throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class); context.start(); System.in.rea原创 2021-12-24 14:40:50 · 1161 阅读 · 0 评论 -
springMVC流程图
总结: 1)前端控制器DispatcherServlet 由框架提供作用:接收请求,处理响应结果 2)处理器映射器HandlerMapping由框架提供 作用:根据请求URL,找到对应的Handler 3)处理器适配器HandlerAdapter由框架提供 作用:调用处理器(Handler|Controller)的方法 4)处理器Handler又名Controller,后端处理器 作用:接收用户请求数据,调用业务方法处理请求 5)视图解析器ViewResolver由框架提..原创 2021-10-21 13:02:02 · 246 阅读 · 0 评论 -
spring中文文档
https://github.com/DocsHome/spring-docs/blob/master/SUMMARY.md原创 2021-10-15 09:15:42 · 421 阅读 · 0 评论 -
Spring、SpringMVC和SpringBoot看这一篇就够了!
一、概念1、SpringSpring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。2、SpringMVCSpring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校转载 2021-01-20 17:21:03 · 296 阅读 · 0 评论 -
简述SpringAop以及拦截器和过滤器
简述AOP是面向切面编程(Aspect-Oriented Programming)的简称。它不是一项技术,和平常说的OOP(Object-Oriented Programming)一样,它是一种编程思想。这里不再做更多的名词解释。上图:从这个丑陋的图中可以看出,利用AOP后,OOP的Objects 都可以只专注于自己的事情,而不需要去管用户是否登录以及记录本次操作日志的事情了。 而且关于用户的判断以及日志记录的代码也只需要一份,不再关心需要将这些额外的操作加在哪里。实现aop的实现主要有转载 2021-01-18 23:42:02 · 513 阅读 · 0 评论 -
Spring数据库连接与Threadlocal
目录关键类:数据库连接放入Threadlocal:从ThreadLocal取数据库连接:关键类:TransactionSynchronizationManager数据库连接放入Threadlocal:TransactionInterceptor.invoke(MethodInvocation invocation)---》TransactionStatus org.springframework.transaction.support.AbstractPlatformTra.原创 2021-01-04 18:29:06 · 1036 阅读 · 0 评论 -
springmvc 分片上传+进度条
要实现分片上传+进度条,总体思路如下:前端处理:由前端js负责将要上传的文件分片,且定义分片总数,当前分片,每分片大小等参数,然后循环调用后端接口(每上传一次分片,调用一次后端接口,也就是while循环,条件是当前处理的分片小于等于最大分片数)。后端接口:接收到前端传来的每一个分片文件(springmvc下可以用MultipartFile接收文件),以及接收前端传来的分片参数,利用RandomAccessFile来将每一次传来的分片数据写入文件。具体实现:前端可以自定根据以上逻.原创 2020-12-09 14:48:26 · 522 阅读 · 0 评论 -
SpringMVC中使用@Valid和@Validate俩个注解进行进行参数校验
下面是一些常用的验证注解空检查@Null 验证对象是否为null@NotNull 验证对象是否不为null, 无法查检长度为0的字符串@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.@NotEmpty 检查约束元素是否为NULL或者是...转载 2020-12-07 09:50:55 · 660 阅读 · 0 评论 -
SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
在我们第一次学Servlet编程,学java web的时候,还没有那么多框架。我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根据需要重写一下doGet,doPost方法,跳转到我们定义好的jsp页面。Servlet类编写完之后在web.xml里注册这个Servlet类。除此之外,没有其他了。我们启动web服务器,在浏览器中输入地址,就可以看到浏览器上输出我们写好的页面。为了更好的理解上面这个过程,你需要学习关于Servlet生命周期的三个阶段,就是所谓的“init-servic转载 2020-11-12 14:20:45 · 142 阅读 · 0 评论 -
@Transactional注解的失效场景
@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。一、事务事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。编程式事务:是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例:try { //TOD转载 2020-11-03 14:05:38 · 220 阅读 · 0 评论 -
父类的@Autowired字段被继承后能否被注入
答案是:可以。下边是一个父类/** * <p><b>Description:</b> </p> * @author wangzhj * @date 2020年8月14日 */public abstract class AbstractProcessor implements Processor, InitializingBean{ @Autowired protected EventDispatchService d原创 2020-08-20 09:19:38 · 2295 阅读 · 0 评论 -
spring中Constructor、@Autowired、@PostConstruct的顺序
其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。Constructor &转载 2020-08-19 11:40:35 · 128 阅读 · 0 评论 -
使用Spring的@Value从Nacos配置中心获取值并自动刷新
在使用Nacos作为配置中心时,除了@NacosValue可以做到自动刷新外,nacos-spring-context:0.3.4版本是支持@Value获取Nacos配置中心的值,并动态刷新的,该功能是Spri依靠ngValueAnnotationBeanPostProcessor类来实现:@Override protected Tuple<String, NacosValueTarget> doWithAnnotation(String beanName, Object bea.原创 2020-07-16 16:36:39 · 24432 阅读 · 2 评论 -
nacos中对spring工具类ReflectionUtils的使用
在nacos源码com.alibaba.nacos.spring.context.annotation.config.NacosValueAnnotationBeanPostProcessor类中,有如下对spring工具类ReflectionUtils的使用,用来处理字段或方法上@NacosValue注解:private void doWithFields(final Object bean, final String beanName) { ReflectionUtils.d.原创 2020-07-16 10:35:45 · 927 阅读 · 0 评论 -
Spring中的各种Utils(五):ReflectionUtils详解
本节中,我们来看看Spring针对反射提供的工具类:ReflectionUtils。反射在容器中使用是非常频繁的了,ReflectionUtils中也提供了想当多的有用的方法,一起来看看。在ReflectionUtils中提供了一些专门用于处理在反射中异常相关的方法,这些方法一般在Spring框架内部使用,当然,出于规范考虑,我们在开发中涉及到反射的异常,也可以使用这些方法。我们按照这些方法的调用链来看代码:void handleReflectionException(Exception ex).转载 2020-07-16 10:31:54 · 1562 阅读 · 0 评论 -
spring自定义condition
之前写了一个condition,实现了org.springframework.context.annotation.Condition接口,但是发现matches方法执行了3次。原因在于判断是否跳过是,会去判断是否实现了org.springframework.context.annotation.ConfigurationCondition接口,不实现org.springframework.context.annotation.ConfigurationCondition接口则Configuration原创 2020-07-08 18:21:12 · 555 阅读 · 0 评论 -
源码分析@Autowired注解原理
原理肯定是java反射,但具体是怎么做的,是通过AutowiredAnnotationBeanPostProcessor来进行处理,并且@Autowired也可以消除setter和getter方法。在AutowiredAnnotationBeanPostProcessor中处理字段注入的内部类:private class AutowiredFieldElement extends InjectionMetadata.InjectedElement { private final boolea原创 2020-05-19 09:42:22 · 1311 阅读 · 0 评论 -
Spring单元测试
一般在开发中,对于后端代码来讲,也需要编写单元测试,但经常看到的是单元测试代码几乎不写,测试依赖于通过前端调用而进行。如果没有前端界面,这个时候单元测试代码就会很方便:/** * <p>Title: ServiceTest.java</p> * <p>Description: </p> * @author wangzhj* @date 2020年5月18日 * @version 1.0 */ package com.xxx原创 2020-05-18 15:35:59 · 294 阅读 · 0 评论 -
记一次基于spring4.3,xml配置文件的旧项目dubbo微服务化改造
@[TOC] 背景昨天接到一个任务,把我们的旧项目改造下,实现微服务化。之前有用过基于SpringBoot+Dubbo的微服务,基于dubbo的注解来实现。这次改造,原理上和之前的相通,但实际操作未必一样。今天对改造完的项目进行了测试,没有问题,在此记录分享一下。如果实现微服务,目前流行的SpringCloud,但如果不是一个全新的项目,而是对旧项目进行改造,那技术选型还是Dubbo合适。Dubbo中文手册:http://dubbo.apache.org/zh-cn/docs/us.原创 2020-05-15 11:43:00 · 374 阅读 · 0 评论