
Spring框架系列教程
文章平均质量分 75
Spring系列教程
JavaEdge聊AI
关注并私信我,获取更多大厂求职经验。《编程严选网》创始人
展开
-
Spring @Scheduled注解写了,为啥定时任务不执行?
【代码】Spring @Scheduled注解写了,为啥定时任务不执行?原创 2023-11-23 10:56:35 · 2003 阅读 · 0 评论 -
SpringBoot项目启动后自动停止了?
【代码】SpringBoot项目启动后自动停止了?原创 2023-11-22 10:49:43 · 1720 阅读 · 0 评论 -
BeanCreationException: Error creating bean with name ‘configurationPropertiesBeans‘ defined in class
如果你是将spring cloud依赖引入SpringBoot项目,就需要spring boot版本和spring cloud版本应严格按照官方版本匹配。笔者就是因为将低版本 sc 引入了高版本 sb 导致报错,升级 sc 版本即可。启动 SpringCloud项目时报错。原创 2023-09-11 21:16:16 · 1121 阅读 · 0 评论 -
深入理解Spring的ImportBeanDefinitionRegistrar接口及其应用
ImportBeanDefinitionRegistrar接口是Spring Framework中的一个关键接口,位于包下。它允许开发人员以编程方式注册额外的Bean定义,使得应用上下文在启动时能够动态地加载和管理Bean。ImportBeanDefinitionRegistrar接口为Spring应用程序的动态注册Bean提供了强大的机制。通过实现该接口,我们可以根据各种条件和场景来注册Bean,从而实现更加灵活和可扩展的应用程序上下文管理。原创 2023-08-23 13:46:40 · 529 阅读 · 0 评论 -
掌握Spring IoC容器和Bean作用,轻松实现依赖注入!
Spring 框架最核心的就是IoC(Inversion of Control,控制反转)容器。此刻对该图可能还有疑惑,来开启本文的征程吧。原创 2020-08-16 21:49:14 · 199 阅读 · 0 评论 -
SpringBoot3.x日志生产最佳实践原来是这样!
SpringBoot对日志的配置和加载进行了封装,让我们可以很方便地使用一些日志框架,只需要定义对应日志框架的配置文件,如LogBack、Log4j、Log4j2等,代码内部便可以直接使用。如我们在resources目录下定义了一个logback xml文件,文件内容是logback相关配置,然后就可以直接在代码在使用Logger记录日志啦:继承LoggingSystem抽象类进行扩展,实现beforeInitialize方法,但内部无任何处理。重点在initialize。原创 2023-08-14 23:45:11 · 931 阅读 · 0 评论 -
Spring判断方法名是符合给定的SPEL+表达式的+API
我们先使用SpelExpressionParser类来解析表达式,然后再创建一个StandardEvaluationContext对象,并将方法名作为变量设置到上下文中。最后,我们使用parseExpression方法来解析表达式,并使用getValue方法来获取表达式的结果。在此例子中,我们的表达式为#methodName.matches(‘get.*ById’),它将检查方法名是否以"get"开头,并以"Id"结尾。再分享我整理汇总的一些 Java 面试相关资料(亲自验证,严谨科学!原创 2023-06-25 10:00:53 · 810 阅读 · 0 评论 -
Spring Data默认值的错误
Spring Data有很多配置的默认值,但不一定都适合你。如一个依赖Cassandra 的项目,有时写入数据后,并不能立马读到。这种错误并没有什么报错,一切都是正常的,就是读不到数据。原创 2023-01-14 06:49:25 · 1178 阅读 · 0 评论 -
记录一次Spring事务线上异常
为简便,本文使用注解方式。Spring初始化时,会通过扫描拦截对事务的方法进行增强。若目标方法存在事务,Spring就会创建一个Bean对应的代理(Proxy)对象,并进行相关的事务处理操作。原创 2023-01-11 00:19:18 · 640 阅读 · 0 评论 -
Spring Framework 6.x强势发布
升级到Version 6.0Core Container基于JSR-330的**@Inject注解将在Jakarta.Inject中。基于JSR-250的注解@PostConstruct和@Predestroy**将在jakarta.annotation。暂时,Spring也一直检测到其javax等价物,涵盖预编译的二进制二进制文件中的常用使用。由于jakarta ee迁移,数据访问和事务,请务必使用Hibernate-Core-Jakarta Artifact升级到Hibernate Orm .原创 2022-03-09 00:08:03 · 715 阅读 · 0 评论 -
Spring获取FactoryBean本身
通过getBean("beanName")可从容器中获取相应的bean对象.若beanName对应的是一个FactroyBean,容器会自动调用FactoryBean的getObject()方法来加工生成一个bean。若获取FactoryBean本身,而非getObject()方法得到的bean,可通过getBean("&beanName");即在beanName前加上&。...原创 2022-02-15 21:39:06 · 1079 阅读 · 0 评论 -
Spring Aware接口详解
若 Spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 bean 中获得相应的 Spring 容器资源。Spring 中提供的 Aware 接口有:BeanNameAware:注入当前 bean 对应 beanNameBeanClassLoaderAware:注入加载当前 bean 的 ClassLoaderBeanFactoryAware:注入 当前BeanFactory容器 的引用BeanNameAware原创 2022-02-10 22:33:48 · 6390 阅读 · 10 评论 -
Spring中的单例模式使用
1 spring单例 V.S 设计模式的单例设计模式单例,在整个应用中只有一个实例spring单例,在一个IoC容器中只有一个实例但spring中的单例也不影响应用并发访问。大多数时候客户端都在访问我们应用中的业务对象,为减少并发控制,不应该在业务对象中设置那些容易造成出错的成员变量。成员变量的解决方式方法的参数,局部变量(相当于new)threadlocal、设置bean scope=prototypeSpring Bean Scope 有状态的Bean 无状态的Bean遇到原创 2022-01-19 22:10:57 · 5653 阅读 · 2 评论 -
Java的@RunWith和@SpringBootTest注解详解
@RunWith当一个类用@RunWith注释或继承一个用@RunWith注释的类时,JUnit将调用它所引用的类来运行该类中的测试而不是开发者去在junit内部去构建它。我们在开发过程中使用这个特性。@SpringBootTest配置文件属性的读取可以在运行SpringBoot为基础的测试类上指定的注释。在常规Spring TestContext框架之上和之上提供以下特性:当定义没有特...原创 2020-01-25 16:18:55 · 13433 阅读 · 4 评论 -
SpringBoot实战 - 创建自己的auto-configuration
如果你在公司里开发共享libraries,或者正在开发一个开源或商业library,你可能想开发自己的自动配置(auto-configuration)。自动配置类可以打包到外部jars,并且依旧可以被Spring Boot识别。自动配置可以关联一个"starter",用于提供auto-configuration的代码及需要引用的libraries。我们首先讲解构建自己的auto-configura...原创 2019-09-08 19:50:07 · 2252 阅读 · 0 评论 -
SpringBoot统一异常处理流程
Spring 3.2新增**@ControllerAdvice** 注解用于定义@ExceptionHandler@InitBinder@ModelAttribute\并应用到所有@RequestMapping。BasicErrorControllerSpringBoot内置了一个BasicErrorController对异常进行统一的处理,当在页面发生异常的时候会自动把请求转到/error(Spring Boot提供的一个默认的映射) ,可以自定义页面内容,只需在classpath路径下新原创 2021-01-10 18:05:38 · 1307 阅读 · 0 评论 -
Spring Boot CLI安装(WIN10、macOS系统)
1. 命令行界面利用了起步依赖和自动配置,让人专注于代码本身能检测到使用了哪些类,要向Classpath添加哪些起步依赖才能运转起来,接着一系列自动配置就会接踵而来,确保启用springMVC和DispatherServlet,控制器就能响应HTTP请求了,是SpringBoot的非必要组成部分2. 最直接的方法:手工安装(WIN用户唯一安装方式)下载地址: https://do原创 2017-04-01 10:18:57 · 12571 阅读 · 4 评论 -
重磅 Spring Boot 2.1.4 正式版发布!
期待已久的Spring Boot 2.1.4 RELEASE版本已于今天四月初正式发布! Spring Boot版本很多,作为使用Spring Boot的技术人而言,版本的选择也尤为重要登录 官网不难发现 Spring Boot已默更新到Spring Boot 2.1.4版本(RELEASE 版本)我们一起来看看Spring Boo...原创 2019-04-04 17:05:33 · 4780 阅读 · 0 评论 -
01-如何在 Spring Boot 应用程序中使用 Actuator 监控和管理端点,提高应用程序的生产力?
添加依赖:原创 2021-10-02 19:31:24 · 1684 阅读 · 1 评论 -
Hello Spring Boot应用程序
1. 环境:系统:Windows10IDE:intellij IDEA2017.1maven:3.5.02. 目录结构3. 代码package com.imooc;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.Requ原创 2017-05-03 16:16:21 · 1046 阅读 · 0 评论 -
springboot项目整合Swagger2
在聚合工程中的父 pom 工程的 pom 文件中添加依赖<!-- swagger2 配置 --><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.4.0&l...原创 2021-01-11 10:45:00 · 1692 阅读 · 0 评论 -
Spring Cloud Alibaba 实战(2) - 关于Spring Boot你不可不知道的实情
0 相关源码1 什么是Spring Boot一个快速开发的脚手架作用快速创建独立的、生产级的基于Spring的应用程序特性无需部署WAR文件提供starter简化配置尽可能自动配置Spring以及第三方库提供“生产就绪”功能,例如指标、健康检查、外部配置等无代码生成&无XML2 编写一个Spring Boot应用2.1 需求整合Spring MVC/test路径(端点)2.2 使用Spring Initializr快速创建Spring Boot应用原创 2021-10-02 18:29:11 · 1577 阅读 · 2 评论 -
@SpringBootApplication注解到底做了什么,你真的了解吗?
@SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filte...原创 2020-04-26 21:48:42 · 5837 阅读 · 8 评论 -
可能是全网最全的SpringBoot启动流程源码分析(最新3.x版本)
一旦一个 SpringApplication 开始,事件就会尽早发布 - 在 or ApplicationContext 可用之前Environment,但在注册之后ApplicationListener。所以SpringApplicationRunListener和ApplicationListener之间的关系是通过ApplicationEventMulticaster广播出去的SpringApplicationEvent所联系。用于监听SpringApplication的run方法的执行。原创 2020-04-25 20:19:44 · 4640 阅读 · 8 评论 -
SpringBoot如何实现分环境配置
spring: profiles: active: dev # 默认使用的 dev 环境 application: name: account-service原创 2021-01-11 23:24:03 · 1303 阅读 · 0 评论 -
SpringMVC源码解析之AsyncHandlerInterceptor异步的处理器拦截器
当处理器启动一个异步请求时,DispatcherServlet 退出而不会像处理同步请求那样调用 postHandle 和 afterCompletion,因为请求处理的结果(例如 ModelAndView)可能尚未准备好,并将由另一个线程并发生成。为了区分初始请求和异步处理完成后的后续调度,拦截器可以检查 jakarta.servlet.ServletRequest 的 jakarta.servlet.DispatcherType 是 “REQUEST” 还是 “ASYNC”。自版本 3.2 起提供。原创 2020-06-04 15:11:32 · 7696 阅读 · 1 评论 -
SpringMVC源码解析从service到doDispatch
请求在被Servlet处理之前会先被过滤器处理,之后调用Servlet的service方法来对相应的请求进行处理响应。所以我们这里分析的入口是Servlet的service方法。我们在用SpringMVC的时候,通常都会在web.xml中进行这样的配置:<servlet> <servlet-name>spring-mvc</servlet-name> <servlet-class>org.springframework.web.servlet.Disp原创 2020-06-05 16:08:11 · 1592 阅读 · 0 评论 -
SpringMVC源码解析之HandlerInterceptor接口
接口给提供了3个方法:1 preHandle执行controller处理逻辑前执行,返回值为boolean ,返回值为true时接着执行postHandle和afterCompletion,如果我们返回false则中断执行拦截处理程序的执行。 HandlerMapping确定的适当处理器对象后调用,但在HandlerAdapter调用处理器之前。DispatcherServlet是在执行链中处理的handler,其中包括了任意数量的拦截器,处理器本身在链的末尾,即最后才处理 handler。 利用原创 2020-06-04 15:11:50 · 1694 阅读 · 0 评论 -
ajax处理前端 js 与后端 ModelAndView 数据绑定
从java后台控制层返回一个ModelAndView,然后用ajax 局部将页面刷新处理方法:前端ajax 接收:$.ajax({type : "post",url : "$!base/aaa/getList",dataType: 'html',data : JSON.stringify(queryData),contentType : "application/json",success : function (data) {// data = jQuery.parseJSON(data原创 2020-06-04 15:26:31 · 2514 阅读 · 0 评论 -
SpringMVC源码解析之Last-Modified缓存机制
Spring MVC 支持HTTP协议的 Last-Modified 缓存机制。支持上次修改的HTTP请求,以方便内容缓存。 相同的合同作为Servlet API中的getLastModified方法。通过委派到org.springframework.web.servlet.HandlerAdapter.getLastModified实施。 默认情况下,任何控制器或HttpRequestHandler Spring的默认框架内可以实现此接口,以实现最后修改时间检查。注:另类处理的实现方法有不同的最后修原创 2020-06-04 14:30:53 · 2201 阅读 · 0 评论 -
SpringMVC源码解析WebContentGenerator
便捷的为任何类型的网页内容产生的父类,像AbstractControllerWebContentInterceptor也可用于自定义处理器HandlerAdapter 。支持HTTP缓存控制选项。 对应的HTTP头的使用可以通过控制"cacheSeconds"和"cacheControl"属性。注:Spring4.2的作为,使用只有当这种的默认行为改变setCacheSeconds ,发送HTTP响应头是符合当前的浏览器和代理服务器实现(即没有HTTP 1.0头了)恢复到以前的行为可以很容易地原创 2020-06-04 15:43:03 · 1872 阅读 · 0 评论 -
Spring MVC工作流程以及请求处理流程
SpringMVC主要是通过前端控制器controller中的注解来完成请求处理的。前段请求从web.xml中servlet的配置开始,根据servlet拦截的url-parttern,来进行请求转发控制。处理请求的流程具体执行步骤如下:1、首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图2-1中的1、2步骤;2、页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对转载 2020-06-04 11:29:41 · 1999 阅读 · 0 评论 -
SpringMVC源码解析-HandlerExecutionChain
最终会调用HandlerInterceptor的preHandle调用所有的HandlerInterceptor拦截器并调用其preHandler方法。applyPostHandle获取所有的拦截器并调用其postHandle方法。triggerAfterCompletion触发afterCompletion执回调的映射HandlerInterceptors。 只会调用afterCompletion执行对于其preHandle调用已成功完成并返回true的拦截器 void triggerA原创 2020-06-05 10:58:51 · 1803 阅读 · 0 评论 -
SpringMVC源码解析之ServletInvocableHandlerMethod
InvocableHandlerMethod提供了一种方法,用于调用处理器方法,处理给定的请求,其已通过注册的HandlerMethodArgumentResolver解析了方法参数值。参数解析往往需要WebDataBinder用于数据结合或进行类型转换。 使用setDataBinderFactory(WebDataBinderFactory)属性来提供一种粘合剂厂传递给参数解析器。使用setHandlerMethodArgumentResolvers自定义的参数解析器的列表。invokeForRe原创 2020-06-05 09:38:40 · 2183 阅读 · 0 评论 -
Spring怎么又 bug 了,响应结果居然乱码了?
换个方式访问该接口,示例如下:期待"JavaEdge:dev 666",但是运行上述代码后,你会发现结果却是下面这样:why?解析这就要求精通 URL 的处理:UriComponentsBuilder#toUriString:URL Encode调用栈如下:至此,都还是正常的,但是当我们把 URL 转化成 String,再通过如下语句发送请求时:会发现,它会再进行一次编码:至此,你应该理解为啥出问题了:依案例代码会执行 2 次编码(Encode),所以最终获取意外惊喜.原创 2021-11-25 14:58:47 · 3139 阅读 · 1 评论 -
Spring RestTemplate为何必须搭配MultiValueMap?
微服务之间的大多都是使用 HTTP 通信,这自然少不了使用 HttpClient。在不适用 Spring 前,一般使用 Apache HttpClient 和 Ok HttpClient 等,而一旦引入 Spring,就有了更好选择 - RestTemplate。参数类型是 MultiValueMap接口:想接受一个 Form 表单请求,读取表单定义的两个参数 para1 和 para2,然后作为响应返回给客户端。定义完接口后,使用 RestTemplate 来发送一个这样的表单请求,代码示例原创 2021-11-25 11:39:41 · 3491 阅读 · 2 评论 -
阿里面试官居然不懂Spring是如何解决循环依赖的?
当Bean产生循环依赖时,比如BeanA的构造方法依赖BeanB作为成员需要注入,BeanB也依赖BeanA,你觉得会出现什么问题呢?又有哪些解决方式呢?直观解决方法时通过set方法去处理,背后的原理其实是缓存。主要解决方式:使用三级缓存singletonObjects: 一级缓存, Cache of singleton objects: bean name --> bean instanceearlySingletonObjects: 二级缓存, Cache of early single原创 2021-05-27 12:54:46 · 1125 阅读 · 3 评论 -
Spring嵌套事务是怎么回滚的?
事务的传播机制多数据源的切换问题更深入理解 Spring 事务。用户注册完成后,需要给该用户登记一门国学必修课,并更新该门课的登记用户数。为此,我添加了两个表。课程表 course,记录课程名称和注册的学生数。CREATE TABLE `course` ( `id` int(11) NOT NULL AUTO_INCREMENT, `course_name` varchar(64) DEFAULT NULL, `number` int(11) DEFAULT NULL, PR.原创 2021-11-24 18:06:56 · 10715 阅读 · 4 评论 -
为什么private方法加了@Transactional,事务也没有生效?
现在产品期望用户创建和保存逻辑分离:把User实例的创建和保存逻辑拆到两个方法分别进行。然后,把事务的注解 @Transactional 加在保存数据库的方法上。@Servicepublic class StudentService { @Autowired private StudentMapper studentMapper; @Autowired private StudentService studentService; public void sa原创 2021-11-23 15:04:01 · 8702 阅读 · 13 评论 -
阿里四面:Spring Exception的原理你精通了吗?
小心过滤器异常@Controller@Slf4jpublic class StudentController { public StudentController(){ System.out.println("construct"); } @PostMapping("/regStudent/{name}") @ResponseBody public String saveUser(String name) throws Exception {原创 2021-10-24 21:49:58 · 7001 阅读 · 8 评论