
享学Spring MVC
文章平均质量分 93
Spring MVC
YourBatman
也许当我老了,也一样写代码。不为别的,只为了爱好。
展开
-
Spring注入的成员属性HttpServletRequest是线程安全的吗?【享学Spring MVC】
我们知道一个`Http`请求就是一个`Request`对象,Servlet规范中使用`HttpServletRequest`来表示一个Http请求。然而在`Spring MVC`中,官方并不建议你直接使用`Servlet`源生的API,如常见的`HttpServletRequest/HttpServletResponse`等,因为官方认为`Servlet`技术只是web的落地实现之一,它并不希望你使用具体API而和某项技术耦合,比如从`Spring 5.0`开始就出现了web的另一种实现方式:Reactiv原创 2020-02-29 21:47:06 · 7177 阅读 · 7 评论 -
web九大组件之---RequestMappingHandlerAdapter详尽解析【享学Spring MVC】
每篇一句在没有充分的知识作为前提的情况下,即使行了万里路,也不过是邮差而已。前言上篇文章介绍了HandlerAdapter适配器的三种实现方式,分别实现了对"非主流"的三种控制器(Controller/HttpRequestHandler/Servlet)的适配,由于此三种控制器本身非常源生和功能简单,自然对应的适配器也非常好理解。虽然说Spring MVC一共兼具支持了4中控制器方式...原创 2019-10-24 16:32:54 · 5143 阅读 · 0 评论 -
【小家java】Spring事务嵌套引发的血案---Transaction rolled back because it has been marked as rollback-only
1、概述相比大家一想到事务,就想到ACID,或者也会想到CAP。但笔者今天不讨论这个,哈哈~本文将从应用层面稍带一点源码,来解释一下我们平时使用事务事会遇到的问题。而本次我们讲的正式嵌套事务引发的问题:2、栗子我们如果使用了spring来管理我们的事务,将会使事务的管理变得异常的简单,比如如下方法就有事务:@Transactional@Overridepublic bool...原创 2018-05-25 16:42:30 · 105833 阅读 · 45 评论 -
【小家java】Spring事务不生效的原因大解读
1、概述事务在后端开发中无处不在,是数据一致性的最基本保证。在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度。因此我们在使用spring事务的时候,门槛变得异常的低,小学生水平就能很好的管理好事务,但是同学们或多或少都遇见过一些事务不生效的难题,为啥呢?本文就针对于此来做一些具体举例分析,尽量做到全覆盖2、栗子...原创 2018-05-25 12:05:20 · 35337 阅读 · 23 评论 -
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)
前言spring cloud技术栈里面,Feign可以使得我们的rest调用和调用本地方法一样方便。但是它真的有非常多的坑,苦不堪言啊。本文将描述我们最为常遇到的坑: Feign发送Get请求时,采用POJO传递参数 Request method ‘POST’ not supported坑 例举Feign发送Get请求时,采用POJO传递参数的坑在使用Feign ...原创 2018-09-05 21:54:56 · 10430 阅读 · 5 评论 -
【小家Spring】@DateTimeFormat和@NumberFormat以及@JsonFormat的使用
前言数据格式化,从本质上讲属于数据转换的范畴。Spring就是基于数据转换框架植入“格式化”功能的。时间是一个比较常用的类型。显示的时候通常是以String显示的。如果前端参数,前端人员也希望用String作为参数。而使用注解处理这些转换,显得就会特别的优雅注解介绍: @DatetimeFormat(pattern=”yyyy-MM-dd”)是将String转换成Date,一般...原创 2018-09-06 15:11:52 · 4691 阅读 · 4 评论 -
【小家Spring】Spring AOP中@Pointcut切入点表达式最全面使用介绍
Pointcut表达式类型标准的AspectJ Aop的pointcut的表达式类型是很丰富的,但是Spring Aop只支持其中的9种,外加Spring Aop自己扩充的一种一共是10种类型的表达式,分别如下。execution:一般用于指定方法的执行,用的最多。within:指定某些类型的全部方法执行,也可用来指定一个包。this:Spring Aop是基于动态代理的,生成的bean...原创 2018-10-30 15:50:34 · 12095 阅读 · 0 评论 -
【小家Spring】Spring AOP的多种使用方式以及神一样的AspectJ-AOP使用介绍
什么时候AOPAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。AOP技它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即切面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块...原创 2018-10-30 12:11:52 · 3156 阅读 · 2 评论 -
【小家Spring】借助Springfox整合SpringBoot和Swagger(API接口神器)
背景随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,swagger就是一款让你更好的书写API文档的框架。没有API文档工具之前,大家都是手写API文档的,在什么地方书写的都有,有在confluence...原创 2018-11-14 11:51:08 · 1800 阅读 · 0 评论 -
【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)
每篇一句天上非的理念,必定有落地的实现,而且一般都不止一个说在前面Spring这么流星很重要的一个思想是:配置化思想。从而达到解耦的目的,很多都不需要硬编码,配置一下即可完成,可谓大大提高了编码的效率。Spring支持的配置文件加载的方式繁多,一方面是扩大了灵活性,另一方面其实也带来了较大的复杂性。因此本文旨在用一篇文章解决读者朋友的烦恼,同时有时候也是我的烦恼加载项目内部配置文件...原创 2018-11-23 18:05:05 · 11904 阅读 · 13 评论 -
【小家Spring】Spring中读取配置的方式,@Value、@PropertySource、@ConfigurationProperties使用详解
每篇一句:世界很公平,你有多努力,就有多特殊。你必须很努力,才能看起来毫不费力前言Spring (Boot)获取参数的方式有很多,其中最被我们熟知的为@Value了,它不可谓不强大。今天就针对我们平时最长使用的@Value,以及可能很少人使用的@PropertySource、@ConfigurationProperties等相关注解进行一个详细的扫盲,希望能够帮助到到家,使用起来更加顺...原创 2018-11-24 19:57:39 · 6291 阅读 · 5 评论 -
【小家Spring】Spring Boot中使用RedisTemplate优雅的操作Redis,并且解决RedisTemplate泛型注入失败的问题
前言Spring为了简化我们对持久化层的操作,针对各种持久化方案提供了统一的Template进行操作。比如我们的熟悉的JdbcTemplate就是让我们方便的操作的关系型数据库的。它有个Spring-Data的子项目,提供了各种SQL、NOSql的便捷操作。比如Redis、MongoDB、ES等等。然后本文主要针对于在SpringBoot中使用RedisTemplate来优雅的操作Redis数...原创 2018-12-01 22:05:28 · 13012 阅读 · 12 评论 -
【小家Spring】Redis序列化、RedisTemplate序列化方式大解读,介绍Genericjackson2jsonredisserializer序列化器的坑
前言最近在做一个项目,由于并发量大,大量使用到了RedisTemplate来操作Redis。但使用过程中,遇到了不少的坑,各种翻看源码来跟踪,也总结出了不少的经验。因此今天专门做一篇专文来记录这些坑,也具体说说RedisTemplate的各种序列化方式的差异性。希望对大家也能有所帮助,帮助大家解决一些疑惑...原创 2018-12-01 22:40:43 · 16641 阅读 · 9 评论 -
【小家Spring】一文读懂Spring中的BeanFactory和FactoryBean(以及它和ObjectFactory的区别)的区别
问题来源开始重视这个问题,源自一次阿里巴巴的二面面试题:说说你对Spring中BeanFactory的理解,它和FactoryBean有什么区别呢?直接区别直面意思:Bean工厂、工厂BeanBeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应...原创 2018-12-18 16:21:18 · 6837 阅读 · 0 评论 -
【小家Spring】分享Spring中一个小巧而优雅的类SimpleAliasRegistry源码分析(别名注册、管理器)
前言Spring是一个非常优秀且流行的框架,里面不乏有很多优秀的设计模式、设计思想。本文主要针对其中一个非常小巧的类:SimpleAliasRegistry做一个源码解读。顺便也分享给大家,若有分析得不到位的地方,非常欢迎指正,毕竟我也是第一次看。分析此类的源码是因为此类很具有代表性,可以部分代表Spring的代码功底,优雅~~~因为群里有好几次提到过说此类虽然很小巧,但是代码设计得很优雅...原创 2018-12-19 10:19:45 · 2668 阅读 · 0 评论 -
【小家Spring】Spring Framework提供的实用纯Java工具类大合集(一)
前言在Spring Framework里的spring-core核心包里面,有个org.springframework.util里面有不少非常实用的工具类。该工具包里面的工具类虽然是被定义在Spring下面的,但是由于Spring框架目前几乎成了JavaEE实际的标准了,因此我们直接使用也是无妨的,很多时候能够大大的提高我们的生产力。本文主要介绍一些个人认为还非常实用的工具类,仅仅代表个人意见...原创 2019-02-02 16:34:25 · 5604 阅读 · 1 评论 -
【小家Spring】SpringBoot中使用Servlet、Filter、Listener三大组件的三种方式以及原理剖析
前提概要web开发使用Controller基本能解决大部分的需求,但是有时候我们也需要使用Servlet,因为相对于拦截和监听来说,有时候原生的还是比较好用的。因此本文就主要介绍web三大组件Servlet、Filter、Listener在SpringBoot中的使用...原创 2019-01-28 17:39:17 · 2582 阅读 · 3 评论 -
【小家Spring】从OncePerRequestFilter的源码解读去了解Spring内置的Filter的特别之处以及常见过滤器使用介绍
前言首先我附上一个截图:从截图上我们可以看到我标红的我们比较熟悉,配置过的一些Filter,他们都继承自OncePerRequestFilter。该Filter从字面上理解:只执行一次的Filter。可能有人会问了,我们自己写的Filter不都只执行一次吗?为何Spring还要专门提供这么一个类来处理呢?这就是本文关心的内容,就Spring内置的这些Filter,我们去理解下Spring...原创 2019-02-21 17:10:50 · 3430 阅读 · 0 评论 -
【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式
前言Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系。因此可以说Spring容器对Bean的注册、管理可以说是它的核心内容,最重要的功能部分。因此本文主要介绍:向Spring容器注册Bean的多种方式向Spring IOC容器注册Bean 的7种方式所有项目建立在SpringBoot2的工程基础上构建(哪怕只用到Spring包,也用此项目构建),pom如...原创 2019-01-30 15:57:11 · 3112 阅读 · 8 评论 -
【小家Spring】Spring MVC好用工具介绍:UrlPathHelper、WebUtils、RequestContextUtils、WebApplicationContextUtils...
前言随着struts2漏洞的出现,以及struts2使用的不方便,过重的设计。所以市面上MVC的实际标已经成了Spring MVC。因此本文主要针对Spring MVC的web环境下,Spring-web提供的这个jar里的util包内的一些类,因为都是比较共用的一些web类,因此在这里做一些介绍~实用类介绍(排名不分先后)ContentCachingRequestWrapper、Con...原创 2019-02-21 21:54:58 · 4867 阅读 · 0 评论 -
【小家Spring】Spring注解驱动开发---Spring Ioc容器中Bean的生命周期详解(BeanPostProcessor解析)
前言bean的生命周期指的是bean创建—初始化到销毁的过程。我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法单实例:在容器启动的时候创建对象多实例:容器不会管理这个bean;容器不会调用销毁方法;Bean生命周期初始化、销毁相关的4种方式1、@Bean指定初始化方法和销毁方法 initMethod destroyMethod...原创 2019-01-30 18:01:09 · 2114 阅读 · 5 评论 -
【小家Spring】Spring注解驱动开发---Servlet 3.0整合Spring MVC(不使用web.xml部署描述符,使用ServletContainerInitializer)
前言大家都知道,Servlet3.0是一次重要升级。可以全部采用注解驱动,大大简化了配置web.xml的麻烦。现在启动一个web容器并不依赖于web.xml配置文件了。然后我们印象深刻的是,之前我们在使用Spring MVC的时候,DispatcherServlet是必须要要在web.xml里配置,现在没有了这个,我们该怎么办呢?本文主要以全注解驱动整合Spring MVC(注意:非Spri...原创 2019-02-17 16:01:07 · 4714 阅读 · 10 评论 -
【小家Spring】Spring MVC容器启动时,web九大组件初始化详解(Spring MVC的运行机制)
前言为了更好的去理解Spring MVC的工作机制,这边博文我们主要讲述Spring MVC在初始化的时候(容器启动的时候),做的一些准备工作。比如URL和Controller的绑定,以及URL和方法method的绑定,拦截器的初始化,视图解析器的初始化等web9大组件的初始化在上篇博文: 【小家Spring】Spring容器(含父子容器)的启动过程源码级别分析(含web.xml启动以及全注...原创 2019-02-27 16:39:12 · 3633 阅读 · 0 评论 -
【小家Spring】Spring容器(含父子容器)的启动过程源码级别分析(含web.xml启动以及全注解驱动,和ContextLoader源码分析)
前言最近在编写Spring相关博文的时候,发现有不少小伙伴对口头上经常说到的Spring容器、父子容器等等概念,既熟悉,又默认。大体知道它是干啥的,但是却有不太能知道所以然因此本文自己也本着一个学习的态度,主要介绍Spring容器(父子容器)的启动过程。由于我们有web.xml配置文件的方式以及这里讲到过的全注解驱动的方式,因此本文都分开来讲述。备注:本文讲述不包括Spring Boot中...原创 2019-02-23 17:52:54 · 6156 阅读 · 7 评论 -
【小家Spring】如何证明Spring是存在父子容器的?顺便解决Spring MVC访问一直404问题(配置文件没问题)
前言各位老铁们是否遇曾经遇到过这样的疑惑:同样是Spring容器里的Bean,为何能够@Autowireservice进Controller里面,但是反之注入就报错呢?报找不到bean~但是自己从容器里明明可以拿到这个Bean啊,怎么回事呢?同样的我们发现,容器里面的属性值,容器之间也是不互通的?环境准备准备一个传统的Spring环境(注意,一定不能是Spring Boot环境),为了偷...原创 2019-02-23 19:42:43 · 1443 阅读 · 2 评论 -
【小家Spring】Spring MVC之RequestContextHolder和LocaleContextHolder的使用详解以及使用误区
前言在Java Web的开发中,我们大都执行着三层的开发模式(Controller、Service、Dao)。然后很少有人知道这三层的职责便捷在哪?所以不乏经常遇到这样的问题:我这块逻辑该写在哪呢?我相信大多数初、中甚至高级程序员也分不太清楚,逻辑分层有点信手拈来,所以最终写成了后辈们眼中的“屎”,哈哈当然代码组织结构不是本文讨论的范畴~~~在实际开发中:有不少小伙伴想在Service层或者...原创 2019-02-28 11:44:22 · 15423 阅读 · 0 评论 -
【小家Spring】Spring MVC执行流程 FrameworkServlet、DispatcherServlet源码分析(processRequest、doDispatch)
前言本篇博文会更偏向于应用、更加宏观一些。但是,本人还是建议,在了解Spring MVC的执行流程之前,先参阅这两篇博文:【小家Spring】Spring容器(含父子容器)的启动过程源码级别分析(含web.xml启动以及全注解驱动,和ContextLoader源码分析)【小家Spring】Spring MVC初始化(容器启动)时,Spring MVC九大组件初始化详解(Spring MVC...原创 2019-02-28 17:20:17 · 2983 阅读 · 1 评论 -
【小家Spring】Spring环境中(含Boot环境),web组件(Servlet、Filter)内注入使用Spring容器里的Bean
前言原创 2019-02-19 18:33:08 · 1762 阅读 · 1 评论 -
【小家Spring】Spring容器加载Bean定义信息的两员大将:AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
前言在分析Spring IOC容器启动流程的时候,在加载Bean定义信息BeanDefinition的时候,用到了两个非常关键的类:AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner。它俩完成对Bean信息的加载。因此为了更加顺畅的去理解Bean的加载的一个过程,本文主要介绍Spring的这两员大将的一个初始化过程,以及它俩...原创 2019-03-01 20:04:03 · 7959 阅读 · 11 评论 -
【小家Spring】Spring解析@Configuration注解的处理器:ConfigurationClassPostProcessor(ConfigurationClassParser)
前言在Spring3.0以后,官方推荐我们使用注解去驱动Spring应用。那么很多人就一下子懵了,不需要xml配置文件了,那我的那些配置项怎么办呢?@Configuration是Spring3.0推出来的注解,用来代替xml配置文件。若一个Class类被标注了这个注解,我们就认为这个类就是一个配置类,然后在这个类里面就可以写相应的其它配置了,比如@Bean等等既然@Configuratio...原创 2019-03-03 22:50:28 · 6502 阅读 · 17 评论 -
【小家Spring】细说Spring IOC容器的自动装配(@Autowired),以及Spring4.0新特性之【泛型依赖注入】的源码级解析
前言前面我发布了Spring IOC容器的刷新(初始化)过程,以及Spring 容器的Bean的实例化、初始化过程。其中有一个步骤小伙伴们比较关心,也提问的比较多,那就是泛型依赖注入。鉴于之前对这一块描述得也不是很详细,鉴于此处还是比较重要的,因此本文专门用篇幅聊聊这个事看本篇文章之前,建议至少已经了解Spring容器的一个大致过程,最好已经看过博文(或者知道):【小家Spring】Abst...原创 2019-03-13 21:50:05 · 8827 阅读 · 6 评论 -
【小家Spring】Spring IOC容器启动流程 AbstractApplicationContext#refresh()方法源码分析(一)
前言还记得我在这篇博文:【小家Spring】Spring容器(含父子容器)的启动过程源码级别分析(含web.xml启动以及全注解驱动,和ContextLoader源码分析)里留了几个非常重要,但是没有解释的方法。其中有一个非常重要的方法ApplicationContext#refresh()方法就是提到两次但都暂时忽略了(因为有父子容器,所以会刷新两次容器~)refresh()方法是Spri...原创 2019-03-04 15:01:21 · 10964 阅读 · 17 评论 -
【小家Spring】AbstractBeanFactory#getBean()、doGetBean完成Bean的初始化、实例化,以及BeanPostProcessor后置处理器源码级详细分析
前言这边博文,主要讲解我们IOC容器的主菜:Bean的实例化。通过之前跟踪Spring IOC刷新的源码,我们所有的剩余的单例Bean都是通过此处来进行初始化的。最重要的一个方法就为:DefaultListableBeanFactory#preInstantiateSingletons然后内部核心方法为:getBean --> doGetBean方法Spring源码基于的Sprin...原创 2019-03-10 10:54:50 · 5385 阅读 · 13 评论 -
【小家Spring】AbstractAutowireCapableBeanFactory#populateBean实现Bean的属性赋值和initializeBean对Bean的初始化
前言在上一篇博文:【小家Spring】AbstractBeanFactory#getBean()、doGetBean完成Bean的初始化、实例化,以及BeanPostProcessor后置处理器源码级详细分析源码分析的时候,留下两个重要的步骤还没有说,一个是属性赋值的populateBean()(依赖注入),还有一个就是赋值后对Bean的一些初始化操作:initializeBean()Abs...原创 2019-03-10 16:09:00 · 4612 阅读 · 1 评论 -
【小家Spring】Spring IOC容器启动流程 AbstractApplicationContext#refresh()方法源码分析(二),Spring容器启动/刷新的完整总结
前言在上一篇文章:【小家Spring】Spring IOC容器启动流程 AbstractApplicationContext#refresh()方法源码分析(一)中已经介绍了前五步,现在Spring IOC容器的工厂环境已经都准备好了。Bean工厂可以简单理解为一个钩子容器,里面注册有众多的BeanFactoryPostProcessor以及BeanFactoryPostProcessor,接...原创 2019-03-16 23:34:20 · 5457 阅读 · 13 评论 -
【小家Spring】为脱离Spring IOC容器管理的Bean赋能【依赖注入】的能力,并分析原理(借助AutowireCapableBeanFactory赋能)
前言咋一看标题,小伙伴们是否还有点小激动呢?觉得这怎么可能呢?可能我们(大众)都是这样认为:自从用上了Spring这个优秀的框架,一般小伙伴们都是一言不合就把对象塞进Spring的IOC容器里面,交给它来替我们管理。不可否认的是,把Bean交给Spring管理,确实极其的方便,优点一大把,并且还几乎没有啥缺点。这也就是为何咱们一言不合就把Bean扔给Spring的原因。(在Spring的技术...原创 2019-03-19 18:14:05 · 3351 阅读 · 3 评论 -
【小家Spring】Spring向容器注册Bean的高级应用:@Import、DeferredImportSelector、ImportBeanDefinitionRegistrar的使用
前言关于@Import在之前的文章里,也都零散的提到过多次,也支出了它的重要性,甚至它的一个解析过程。但是由于@Import模式向容器导入Bean确实非常非常的重要,特别是在注解驱动的Spring项目中、@Enablexxx的设计模式中有大量的使用,在当下最流行的Spring Boot中,可以说作为设置是最重要的一种方式,来做底层抽象、组件式的设计。比如我们熟悉的:@EnableAsync、...原创 2019-03-15 14:07:02 · 2373 阅读 · 3 评论 -
【小家Spring】高性能关键技术之---体验Spring MVC的异步模式(Callable、WebAsyncTask、DeferredResult) 基础使用篇
前言现在已经在2019年,这个时候再来谈Spring MVC的异步模式,好像有点老掉牙了。毕竟现在都Spring5的时代了,甚至将来肯定是webflux的天下了。而Spring MVC的异步请求模式是Spring3.2就推出了,它是基于基Servlet3.0规范实现的,而此规范是2011年推出的,距现在已经有近10的历史了,可谓是非常非常成熟的一种技术规范了。但是震惊的是,我前端时间一连问了...原创 2019-03-20 21:38:13 · 5417 阅读 · 13 评论 -
【小家Spring】Spring贡献的多个注解相关的工具类:AnnotationUtils、AnnotatedElementUtils、AnnotationConfigUtils...
AliasFor解释的使用场景前言本文主要聊聊Spring提供的多个关于注解相关的工具类:AnnotationUtils和AnnotatedElementUtils等等因为很多逻辑都封装在了工具类里面,因此要理解Spring的深层意思,有时候不了解工具类也是比较麻烦的虽然说都是Spring内部去使用,但是有些工具类是public的(下面会有介绍),所以我们平时若有需要,也是可以使用的本...原创 2019-03-24 19:32:21 · 4786 阅读 · 4 评论 -
【小家Spring】BeanFactory体系和ApplicationContext体系,两大体系各接口分析、区别和联系
前言前面已经讲述了很多Spring容器启动、解析、依赖注入等等源码层面的东西了,但是小伙伴有没有一种感觉就是:Spring的设计者把面向对象使用到了极致(使用得非常的好),并且它吧职责单一原则也是使用到了极致。它各个功能区块,通过接口都进行隔离得很开,这是让Spring能组件化开发,可插拔,变得如此优秀、普适的重要原因。它的IOC和AOP主要围绕两大阵营展开的,也就是咱们今天的主题:Bean...原创 2019-03-17 21:52:14 · 3016 阅读 · 1 评论