Spring
Spring相关文章
夜勿语
热爱技术,分享技术,博客园地址:https://www.cnblogs.com/yewy/
展开
-
你所不知道的Spring的@Autowired实现细节
前言相信很多Java开发都遇到过一个面试题:Resource和Autowired的区别是什么?这个问题的答案相信基本都清楚,但是这两者在Spring中是如何实现的呢?这就要分析Spring源码才能知道了。友情提示:本篇主要是讲解Autowired的实现原理,不会分析Spring初始化的过程,不熟悉的读者可以先阅读笔者之前的一篇文章《这一次搞懂Spring的Bean实例化原理》。正文在Spring Bean的整个创建过程中会调用很多BeanPostProcessor接口的的实现类:上图是我整理的Sp原创 2020-08-22 11:36:25 · 2877 阅读 · 2 评论 -
全网最深分析SpringBoot MVC自动配置失效的原因
前言本来没有计划这一篇文章的,只是在看完SpringBoot核心原理后,突然想到之前开发中遇到的MVC自动失效的问题,虽然网上有很多文章以及官方文档都说明了原因,但还是想亲自看一看,本以为很简单的事情,没想到却引发出一个较复杂的问题,请教了很多人都没有得到结果,网上文章也没有写清楚的,最后还是自己搞了很久才弄明白的,此篇主要记录自己的一个分析过程,。正文引出问题上面是SpringBoot MVC的自动配置,问题是这样的,当我们需要自己配置MVC时,有三种选择:实现WebMvcConfigure原创 2020-06-29 21:58:12 · 1535 阅读 · 0 评论 -
这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)
文章目录前言正文启动原理事件驱动自动配置原理Condition注解原理总结前言SpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本非常低,但是学习其实现原理的成本大大增加,需要先了解熟悉Spring原理。如果还不清楚Spring原理的,可以先查看博主之前的文章,本篇主要分析SpringBoot的启动、自动配置、Condition、事件驱动原理。正文启动原理SpringBoot启动非常简单,因其内置了Tomcat,所以只需要通过下面几种方式启动即可原创 2020-06-26 13:14:34 · 1606 阅读 · 2 评论 -
这一次搞懂Spring Web零xml配置原理以及父子容器关系
前言在使用Spring和SpringMVC的老版本进行开发时,我们需要配置很多的xml文件,非常的繁琐,总是让用户自行选择配置也是非常不好的。基于约定大于配置的规定,Spring提供了很多注解帮助我们简化了大量的xml配置;但是在使用SpringMVC时,我们还会使用到WEB-INF/web.xml,但实际上我们是完全可以使用Java类来取代xml配置的,这也是后来SpringBoott的实现原理。本篇就来看看Spring是如何实现完全的零XML配置。正文先来看一下原始的web.xml配置:<原创 2020-06-20 13:11:29 · 837 阅读 · 0 评论 -
这一次搞懂SpringMVC原理
文章目录前言正文请求入口组件初始化调用Controller参数、返回值解析总结前言前面几篇文章,学习了Spring IOC、Bean实例化过程、AOP、事务的源码和设计思想,了解了Spring的整体运行流程,但如果是web开发,那么必不可少的还有Spring MVC,本篇主要分析在请求调用过程中SpringMVC的实现原理,通过本篇要搞懂它是怎么解决请求、参数、返回值映射等问题的。正文请求入口我们都知道前端调用后端接口时,都会通过Servlet进行转发,而Servlet的声明周期包含下面四个阶段:原创 2020-06-15 23:43:32 · 1308 阅读 · 0 评论 -
这一次搞懂Spring的XML解析原理
前言Spring已经是我们Java Web开发必不可少的一个框架,其大大简化了我们的开发,提高了开发者的效率。同时,其源码对于开发者来说也是宝藏,从中我们可以学习到非常优秀的设计思想以及优雅的命名规范,但因其体系庞大、设计复杂对于刚开始阅读源码的人来说是非常困难的。所以在此之前首先你得下定决心,不管有多困难都得坚持下去;其次,最好先把设计模式掌握熟练;然后在开始阅读源码时一定要多画UML类图和时序图,多问自己为什么要这么设计?这样设计的好处是什么?还有没有更好的设计?当然,晕车是难免的,但还是那句话,一定原创 2020-05-24 16:39:26 · 1950 阅读 · 5 评论 -
这一次搞懂Spring自定义标签以及注解解析原理
前言在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的。同时我们常用的注解如:@Service、@Component、@Controller标注的类也是需要在xml中配置<context:component-scan>才能自动注入到IOC容器中,所以本篇也会重点分析注解解析原理。正文自定义标签解析原理在上一篇分析默认标签解析时看到过这个类DefaultBeanDefiniti原创 2020-05-26 22:50:20 · 913 阅读 · 1 评论 -
这一次搞懂Spring的Bean实例化原理
文章目录前言正文环境准备两个重要的Processor注册BeanPostProcessor对象Bean对象的创建createBeanInstanceaddSingletonFactorypopulateBeaninitializeBean总结前言前两篇文章分析了Spring XML和注解的解析原理,并将其封装为BeanDefinition对象存放到IOC容器中,而这些只是refresh方法中的其中一个步骤——obtainFreshBeanFactory,接下来就将围绕着这些BeanDefinition对原创 2020-05-31 20:52:40 · 3330 阅读 · 2 评论 -
Spring IOC原理补充(循环依赖、Bean作用域等)
文章目录前言正文循环依赖什么是循环依赖?Spring是如何解决循环依赖的?作用域实现原理以及如何自定义作用域作用域实现原理自定义ScopeBeanPostProcessor的执行时机SpringBoot零配置实现原理浅析总结前言通过之前的几篇文章将Spring基于XML配置的IOC原理分析完成,但其中还有一些比较重要的细节没有分析总结,比如循环依赖的解决、作用域的实现原理、BeanPostProcessor的执行时机以及SpringBoot零配置实现原理(@ComponentScan、@Import、@原创 2020-06-02 23:39:57 · 1121 阅读 · 0 评论 -
这一次搞懂Spring代理创建及AOP链式调用过程
文章目录前言正文基本概念代理对象的创建小结AOP链式调用前言AOP,也就是面向切面编程,它可以将公共的代码抽离出来,动态的织入到目标类、目标方法中,大大提高我们编程的效率,也使程序变得更加优雅。如事务、操作日志等都可以使用AOP实现。这种织入可以是在运行期动态生成代理对象实现,也可以在编译期、类加载时期静态织入到代码中。而Spring正是通过第一种方法实现,且在代理类的生成上也有两种方式:JDK Proxy和CGLIB,默认当类实现了接口时使用前者,否则使用后者;另外Spring AOP只能实现对方法的原创 2020-06-06 18:23:58 · 1571 阅读 · 0 评论 -
这一次搞懂Spring事务注解的解析
前言事务我们都知道是什么,而Spring事务就是在数据库之上利用AOP提供声明式事务和编程式事务帮助我们简化开发,解耦业务逻辑和系统逻辑。但是Spring事务原理是怎样?事务在方法间是如何传播的?为什么有时候事务会失效?接下来几篇文章将重点分析Spring事务源码,让我们彻底搞懂Spring事务的原理。正文XML标签的解析<tx:annotation-driven transaction-manager="transactionManager"/>配置过事务的应该都不陌生,上面这个配原创 2020-06-09 22:14:13 · 1266 阅读 · 0 评论 -
这一次搞懂Spring事务是如何传播的
文章目录前言正文事务切面的调用过程事务的传播性概念实例分析总结前言上一篇分析了事务注解的解析过程,本质上是将事务封装为切面加入到AOP的执行链中,因此会调用到MethodInceptor的实现类的invoke方法,而事务切面的Interceptor就是TransactionInterceptor,所以本篇直接从该类开始。正文事务切面的调用过程 public Object invoke(MethodInvocation invocation) throws Throwable { // Work原创 2020-06-12 00:00:09 · 1051 阅读 · 0 评论