SpringBoot
文章平均质量分 84
流烟默
这个作者很懒,什么都没留下…
展开
-
Kafka【七】SpringBoot整合kafka实践
这里SpringBoot为3.0.5,jdk为17,kafka-clients为3.6.1原创 2024-09-04 14:14:04 · 257 阅读 · 0 评论 -
SpringBoot/SSM体系下跨域解决方案
本文总结SpringBoot或者SSM体系下跨域后端处理方案。原创 2016-10-24 17:22:56 · 1417 阅读 · 1 评论 -
修改Request与Response中的内容
需求背景:与客户端通信内容需要加密。客户端将请求参数进行加密,服务端对响应结果进行加密。那么对于后端而言,最方便的就是在过滤器里面对请求、响应进行统一处理了。这里需要涉及到HttpServletRequestWrapper与HttpServletResponseWrapper。# 【1】请求处理如下所示ParameterRequestWrapper 继承自HttpServletRequestWrapper ,重写获取参数的方法。```java/** * Created by jianggc原创 2017-01-18 15:24:37 · 5277 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(六)
接上文[SpringBoot中事务执行原理分析(五)](https://blog.csdn.net/J080624/article/details/78264800)后,本文我们分析一下事务处理过程中的事务同步管理器`TransactionSynchronizationManager`与事务同步`SqlSessionSynchronization`。# 【1】事务同步管理器这里指的是TransactionSynchronizationManager。管理每个线程的资源和事务同步的中央委托。通常用于原创 2017-09-10 18:13:36 · 2386 阅读 · 0 评论 -
SpringBoot中事务执行原理分析补充篇
本文是对[SpringBoot中事务执行原理分析(一)](https://janus.blog.csdn.net/article/details/54603669)的补充说明,我们详细分析一下如何判断Advisor与我们的service是否匹配。在前文中我们提到了**BeanFactoryTransactionAttributeSourceAdvisor**,其包含了Advice用于对我们的service进行增强实现事务效果。```csharppublic class BeanFactoryTra原创 2016-11-17 15:50:09 · 837 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(五)
接上文[SpringBoot中事务执行原理分析(四)](https://blog.csdn.net/J080624/article/details/52786286)我们分析过方法正常执行完事务提交后,本文我们继续分析目标方法抛出异常后事务的回滚流程,即 `completeTransactionAfterThrowing(txInfo, ex)`。**TransactionAspectSupport的completeTransactionAfterThrowing方法如下。**```javaprot原创 2017-10-17 18:58:06 · 1215 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(四)
接上文[SpringBoot中事务执行原理分析(三)](https://blog.csdn.net/J080624/article/details/52785544)我们分析过事务信息对象的获取后,本文我们继续分析目标方法执行后事务的提交流程,即 `commitTransactionAfterReturning(txInfo);`。如下所示TransactionAspectSupport的事务提交动作交给了事务管理器来处理。```java// org.springframework.transact原创 2016-10-11 11:10:13 · 1805 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(三)
接上文[SpringBoot中事务执行原理分析(二)](https://janus.blog.csdn.net/article/details/53202138)后,本文我们分析事务执行流程中的`获取事务对象 - createTransactionIfNecessary` 。也就是分析TransactionAspectSupport的invokeWithinTransaction方法中下面这行代码。```java//TransactionAspectSupportTransactionInfo原创 2016-10-11 10:06:24 · 1016 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(二)
接上文[SpringBoot中事务执行原理分析(一)](https://janus.blog.csdn.net/article/details/54603669)分析后,我们本文详细跟踪下TransactionInterceptor是如何控制事务行为的。前面我们提到了,我们的service被包装为代理。当触发目标方法时首先触发了`DynamicAdvisedInterceptor`的intercept方法,我们就从这里开始跟踪。![在这里插入图片描述](https://img-blog.csdnim原创 2016-11-17 16:32:00 · 1027 阅读 · 0 评论 -
SpringBoot中事务执行原理分析(一)
如下所示,如果没有应用事务(比如事务注解或者xml配置或者编程式事务),那么通常在PreparedStatement执行后,数据就进入了数据库,即使下一行业务代码抛出了异常也不会导致回滚。从本文开始我们开始分析事务执行原理,本文的环境是SpringBoot(+MybatisPlus),当然在SSM的环境下其本质也是一致的。PreparedStatementHandler的update方法。................................................原创 2017-01-18 18:38:26 · 1442 阅读 · 0 评论 -
SpringBoot中如何将@Bean方法解析为BeanDefinition?
本文是对[SpringBoot自动配置原理解析(四)](https://janus.blog.csdn.net/article/details/53466960)的补充,我们这里详细说明一下SpringBoot是如何将@Bean方法注册为BeanDefinition的。我们以`MybatisPlusAutoConfiguration`为例说明`sqlSessionFactory()`这个方法如何解析为BeanDefinition。```java@Bean@ConditionalOnMissing原创 2016-09-22 16:59:56 · 981 阅读 · 0 评论 -
SpringBoot自动配置原理解析(五)
其实本文是对[SpringBoot自动配置原理解析(二)](https://blog.csdn.net/J080624/article/details/52692159)的补充,本文我们主要研究一下`@ComponentScans`的解析过程。如下所示,在`ConfigurationClassParser`的`doProcessConfigurationClass`方法中会对@ComponentScan注解进行处理。```java// Process any @ComponentScan annot原创 2018-03-26 19:23:31 · 5211 阅读 · 0 评论 -
SpringBoot自动配置原理解析(四)
接上文[SpringBoot自动配置原理解析(三)](https://blog.csdn.net/J080624/article/details/52756551)后,我们本文开始分析`this.reader.loadBeanDefinitions(configClasses);`。也就是`ConfigurationClassBeanDefinitionReader`的`loadBeanDefinitions`方法。也就是在这个方法里面,对前面没有处理的`@Bean注解的method`、配置类引入的 比原创 2016-12-05 16:54:12 · 1544 阅读 · 0 评论 -
SpringBoot自动配置原理解析(三)
接上文[SpringBoot自动配置原理解析(二)](https://blog.csdn.net/J080624/article/details/52692159)我们继续往下分析。如下是ConfigurationClassParser的parse方法,当内部parse方法执行完后,就该执行`this.deferredImportSelectorHandler.process();`方法。这个时候我们的`@Bean`方法还只是`configClass`中的`BeanMethod`,还没有被注册为Bea原创 2016-10-08 14:49:09 · 969 阅读 · 0 评论 -
SpringBoot自动配置原理解析(二)
继[SpringBoot自动配置原理解析(一)](https://blog.csdn.net/J080624/article/details/52687492)后,我们继续分析SpringBoot如何进行自动配置的。前面我们从表现上跟踪了一下SpringBoot自动配置的大概过程,但是并没有说明处理器、环节等信息,本文从源码角度我们看一下。首先说明一下,BeanDefinition的扫描注册发生在refresh过程中的`invokeBeanFactoryPostProcessors`方法中,具体处理原创 2016-09-28 17:16:37 · 1132 阅读 · 0 评论 -
SpringBoot自动配置原理解析(一)
本文我们开始分析SpringBoot的自动配置原理。当我们想使用某个中间件时比如Redis,我们直接引入其starter然后在application.properties做一些简单配置即可使用。这就是SpringBoot的自动配置在起作用。从本质来讲,自动配置无非就是有个处理器在启动流程的某个环节根据某个条件进行了自动扫描并注册BeanDefinition到BeanFactory中。那么这里我们要搞清楚这样几个问题:* 表现是什么?* 处理器是什么?* 哪个环节?* 如何扫描注册?* 什么时候原创 2016-09-28 08:44:13 · 4218 阅读 · 0 评论 -
SpringBoot关闭过程中是如何销毁一个DisposableBean的?
接上文[SpringBoot关闭时都做了哪些事?](https://janus.blog.csdn.net/article/details/73775835),本文我们详细分析一下DisposableBean的destroy过程。`DefaultSingletonBeanRegistry`的`destroySingleton`方法。```javapublic void destroySingleton(String beanName) { // Remove a registered singl原创 2018-11-17 10:25:34 · 1395 阅读 · 1 评论 -
SpringBoot关闭时都做了哪些事?
本文我们开始分析SpringBoot关闭的时候都做了哪些事。核心流程梳理如下:* 从LiveBeansView移除掉维护的上下文* 广播ContextClosedEvent事件* 触发生命周期处理器的onClose方法,这里会stopBean,也就是触发那些Lifecycle实例的stop方法* 销毁BeanFactory中的所有DisposableBean并清空一些缓存* 关闭BeanFactory* 停止服务,这里会stop Tomcat* 将earlyApplicationListene原创 2017-06-27 11:19:21 · 27313 阅读 · 5 评论 -
SpringBoot启动过程广播的事件有什么作用?
前面我们分析了[SpringBoot的启动流程](https://janus.blog.csdn.net/article/details/54949491),其广播了诸多事件,本文我们尝试总结一下这些事件所带来的影响。**事件梳理**如下七种事件均是SpringApplicationEvent事件体系。* starting()方法广播ApplicationStartingEvent事件* environmentPrepared()方法广播ApplicationEnvironmentPrepar原创 2016-10-08 16:52:01 · 1690 阅读 · 0 评论 -
SpringBoot中事件广播体系梳理
上文[Spring中事件监听(通知)机制详解与实践](https://janus.blog.csdn.net/article/details/57411870)我们研究是Spring中的事件机制原理并进行了实践,本文我们梳理一下SpringBoot中事件广播的几个分支。# 【1】持有分支事件广播是使用SimpleApplicationEventMulticaster这个应用事件广播器进行处理的。所以我们只需要看这个实例被哪些类持有。## ① AbstractApplicationContext也原创 2018-11-17 09:47:58 · 2541 阅读 · 0 评论 -
SpringBoot启动时都做了哪些事(四)?
接[SpringBoot启动时都做了哪些事(三)?](https://blog.csdn.net/J080624/article/details/54950679)后,我们继续分析SpringBoot启动过程流程。本文我们分析应用上下文刷新以及后置处理。# 【1】refreshContext## ① refreshSpringApplication的refreshContext方法。```javaprivate void refreshContext(ConfigurableApplicat原创 2017-02-09 16:04:01 · 4320 阅读 · 1 评论 -
SpringBoot启动时都做了哪些事(三)?
接上一篇[SpringBoot启动时都做了哪些事(二)?](https://blog.csdn.net/J080624/article/details/54949491)后,我们继续分析SpringBoot启动过程流程。本文我们开始分析应用上下文的创建和配置。# 【1】创建应用上下文SpringApplication的createApplicationContext方法。如下所示如果contextClass 为努力,那么根据webApplicationType来获取上下文class类型,然后使原创 2017-02-09 18:06:22 · 1831 阅读 · 0 评论 -
SpringBoot中是如何打印banner的呢?
SpringBoot中是如何打印banner的呢?我们如何自定义banner?SpringApplication的printBanner方法如下所示,其是一个桥梁。进行了必要的判断后,获取resourceLoader 和bannerPrinter,然后将任务交给了bannerPrinter去处理。```javaBanner printedBanner = printBanner(environment);private Banner printBanner(ConfigurableEnviro.原创 2017-02-09 14:36:23 · 13331 阅读 · 0 评论 -
SpringBoot启动时都做了哪些事(二)?
接上一篇[SpringBoot启动时都做了哪些事(一)](https://blog.csdn.net/J080624/article/details/54949134)后,我们继续分析SpringBoot启动过程流程。SpringApplication的run方法```javapublic ConfigurableApplicationContext run(String... args) { //实例化监控 StopWatch stopWatch = new StopWatch(); //原创 2017-02-09 17:26:31 · 3240 阅读 · 0 评论 -
SpringBoot启动时都做了哪些事(一)?
本文环境是SpringBoot 2.2.4.RELEASE,我们尝试去跟踪研究启动流程都做了哪些事情。以main方法为入口。```javapublic static void main(String[] args) { SpringApplication.run(RecommendApplication.class, args); }```SpringApplication的run方法。```javapublic static ConfigurableApplicationCon原创 2017-02-09 17:02:01 · 5568 阅读 · 0 评论 -
SpringBoot中是如何创建WebServer的?
本文这里环境是springboot 2.2.4.RELEASE。创建WebServer是在refresh方法的onRefresh方法中实现的。其也是refresh方法体系的一个重要步骤。ServletWebServerApplicationContext的onRefresh方法。如下所示其首先调用父类的onRefresh方法初始化ThemeSource,然后调用createWebServer创建WebServer。```java@Overrideprotected void onRefresh()原创 2016-12-27 14:53:15 · 11685 阅读 · 2 评论 -
前后端分离时跨域的一些问题与解决方案
# 【1】什么是跨域?## 同源策略同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)浏览器的同源策略阻止了浏览器读取不同源的资源。这种转载 2022-04-25 13:05:47 · 1610 阅读 · 0 评论 -
Spring中事件监听(通知)机制详解与实践
Spring中事件监听(也有说法叫事件通知)机制,其实本质是观察者模式的应用。当某个事件发生时,其会被广播出去,监听该实践的listener就会被触发然后执行响应的动作。该模式可良好应用于程序解耦,类似消息的发布订阅。# 【1】事件、广播与监听这个模式有三元素:事件、广播与监听。## ① 事件如下图所示,事件继承自EventObject类,该类维护了事件最初发生在其上的对象-source。而我们通常自定义的事件实际应继承自抽象类ApplicationEvent。比如常见的上下文刷新事件Contex原创 2017-02-26 13:22:46 · 6858 阅读 · 2 评论 -
SpringMVC常见组件之HandlerExceptionResolver分析
# 【1】处理handler返回结果前置流程,在DispatcherServlet处理请求的过程最后处理结果时,会判断处理过程中异常是否存在,如果异常存在就会尝试对异常进行处理。```javaDispatcherServlet#doDispatch -->DispatcherServlet#processDispatchResult-->DispatcherServlet#processHandlerException```**处理handler的返回结果源码:**```javapriv原创 2017-02-22 11:30:09 · 9182 阅读 · 3 评论 -
一个由服务端返回的long值改变引发的血案
背景:服务端返回信息,其中某ID字段是long型,值是16位。前端拿到后再传给服务端,某ID值发生了改变。**这是因为,JS 中能精准表示的最大整数是:**```javaMath.pow(2, 53),十进制即 9007199254740992```所以我们需要服务端返回给前端时对这种情况进行处理,本文是在springboot环境下使用fastJsonHttpMessageConverter引申介绍。# 【1】自定义MyLongSerializerAndDeserializer我们自定义M原创 2017-01-16 15:22:05 · 581 阅读 · 0 评论 -
SpringMVC常见组件之HandlerMethodReturnValueHandler解析
在前面我们分析[SpringMVC常见组件之HandlerAdapter分析](https://janus.blog.csdn.net/article/details/120848435)中提到过如下过程:```javaRequestMappingHandlerAdapter.invokeAndHandle(webRequest, mavContainer);--ServletInvocableHandlerMethod.invokeAndHandle(webRequest, mavContaine原创 2017-02-24 16:53:08 · 5757 阅读 · 0 评论 -
SpringMVC常见组件之HandlerMethodArgumentResolver解析
在前面我们分析[SpringMVC常见组件之HandlerAdapter分析](https://janus.blog.csdn.net/article/details/120848435)中提到过如下过程```javaRequestMappingHandlerAdapter.invokeAndHandle(webRequest, mavContainer);--ServletInvocableHandlerMethod.invokeAndHandle(webRequest, mavContainer原创 2017-02-26 14:17:04 · 1806 阅读 · 0 评论 -
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
【1】Servlet3.0前① Servlet实例实例代码如下,通常继承HttpServletpublic class HelloWorld extends HttpServlet { private String message; public void init() throws ServletException { // 执行必需的初始化 ...原创 2018-04-19 20:37:20 · 1841 阅读 · 0 评论 -
Servlet容器与Web容器详解
【1】容器所谓容器(服务器、中间件等),就是提供一些底层的、业务无关的基本功能,为真正的Servlet提供服务。简单来说:容器负责根据请求的信息找到对应的Servlet,传递Request和Response参数,调用Servlet的service方法,完成请求的响应。Servlet规范定义了一个API标准,这一标准的实现通常称为Servlet容器,比如开源的Tomcat、JBoss。Web容器更准确原创 2017-09-19 15:03:41 · 2010 阅读 · 0 评论 -
SpringBoot中那些常用注解分析
这里我们尝试总结开发中常用的那些注解使用与区别。# 【1】定义/注入bean的注解## ① @Component标明带该注解的类是“组件”。当使用基于注解的配置和类路径扫描时,此类类被视为自动检测的候选类。@Component 注解作用于类,通常是通过路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。如下所示,其只有一个属性value用来定义组件名称。原创 2016-12-09 11:03:28 · 1761 阅读 · 0 评论 -
Spring、SpringMVC和SpringBoot框架中那些容器
# 【1】SpringMVC和Tomcat## ① ServletContext如下图所示,这里获取到的`ServletContext`是`ApplicationContextFacade`,是一个`ApplicationContext`的外观对象(也就是说这里应用了设计模式中的外观模式)。`ApplicationContextFacade`有三个属性:`classCache`、`objectCache`和源目标对象context(`ApplicationContext`)。**context(`A原创 2017-02-22 14:24:28 · 1342 阅读 · 0 评论 -
SpringBoot整合CXF实现WebService
pom依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4.RELEASE</version> <relativePath/> <!-- lookup parent from r原创 2021-03-07 13:03:31 · 3173 阅读 · 2 评论 -
SpringBoot自定义错误页面与原理讲解
SpringBoot请求错误如404可能看到如下页面:有时可能有需要说自定义错误页面针对不同的http.status,如404/400。【1】解决方法① 注册错误页面如下所示:@Componentpublic class ErrorPageConfig implements ErrorPageRegistrar { @Override public void registerErrorPages(ErrorPageRegistry registry) { Err原创 2020-10-21 13:17:30 · 2142 阅读 · 0 评论 -
SpringMVC中参数是如何绑定and返回结果是如何解析的?
这里框架背景为SpringBoot 2.2.4.RELEASE。如果你曾经跟踪过请求流程或者在某个博客看到过请求流程源码,比如[SpringBoot中添加@ResponseBody注解会发生什么?](https://blog.csdn.net/J080624/article/details/107066082),你应该知道参数解析是由各种各样的HandlerMethodArgumentResolver(参数解析器)处理的。不同类型的参数会有对应的参数解析器处理。**HandlerMethodArgu原创 2016-10-14 15:58:32 · 3056 阅读 · 0 评论 -
SpringBoot中添加@ResponseBody注解会发生什么?
【1】SpringBoot接收到请求① springboot接收到一个请求返回json格式的列表如下所示,首先进入DispatcherServlet使用RequestMappingHandlerAdapter进行处理。而RequestMappingHandlerAdapter (extends AbstractHandlerMethodAdapter)会调用父类AbstractHandlerMethodAdapter的handle方法进行处理:② RequestMappingHandlerAda原创 2020-07-01 16:40:59 · 4149 阅读 · 2 评论