spring
文章平均质量分 74
Darren i
这个作者很懒,什么都没留下…
展开
-
Spring IOC 如何解决循环依赖?
前言假设对象A、B 之间相互依赖,Spring IOC是如何解决A、B两个对象的实例化的?答案是三级缓存。三级缓存SpringIOC 通过三级缓存来解决循环依赖问题,三级缓存指的是三个Map:singletonObjects:一级缓存,key为BeanName,value为Bean,日常获取Bean的地方earlySingletonObjects:二级缓存,key为BeanName,value为Bean,已经实例化但还没有进行属性注入的Bean,由三级缓存放入singletonFactorie原创 2021-07-09 16:43:50 · 4351 阅读 · 1 评论 -
Spring IOC 容器启动、Bean生命周期详解
前言在Spring IOC 和 AOP 概览中,简要介绍了IOC容器和AOP,没有深入IOC容器Bean的实例化,此文承接上文深入分析Bean的实例化过程、生命周期。Spring IOC的过程Spring的IoC容器在实现控制反转和依赖注入的过程中,可以划分为两个阶段:容器启动Bean实例化容器启动的流程容器启动阶段需要扫描 XML/注解/JavaConfig 中需要被Spring管理的Bean信息将Bean信息封装成 BeanDefinition 并放入beanDefinitionM原创 2021-07-09 15:48:47 · 430 阅读 · 0 评论 -
Spring IOC 和 AOP 概览
IOC(控制反转)IoC(Inversion of Control,控制倒转)。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。在没有IOC时,我们通过new 等关键字等方式,自己实例化对象。而使用IOC只需要通过IOC容器去获取对象,所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。IOC容器Spring中提供了两种IoC容器:BeanFactoryApplicationContext原创 2021-06-25 11:36:27 · 370 阅读 · 1 评论 -
SpringMVC 参数校验
SpringMVC 可以通过使用注解的方式对参数进行校验,省去参数校验的代码引入依赖Spring项目需引入<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.7.Final</version></dependenc原创 2021-01-09 21:17:40 · 5888 阅读 · 1 评论 -
SpringMVC控制器方法获取参数时@RequestParam注解加与不加的区别
问题在使用SpringMVC时获取参数时,加与不加@RequestParam都会自动传入参数值,那加与不加的区别是什么?测试 @GetMapping("test1") public String test1(String s){ return "参数:"+s; } @GetMapping("test2") public String test2(@RequestParam String s){ return "参数:"+s; }原创 2021-01-09 17:08:46 · 1852 阅读 · 0 评论 -
SpringMvc @RequestParam、 @RequestBody、@RequestPart 的区别
注解@RequestParam接收的参数是来自requestHeader中,即请求头。RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam有三个配置参数:required 表示是否必须,默认为 true,必须。defaultValue 可设置请求参数的默认值。value 为接收url的参数名(相当于key值)。@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内原创 2020-08-20 11:55:04 · 4253 阅读 · 1 评论 -
Redis两种客户端:lettuce和Jedis的区别
spring boot 2的spring-boot-starter-data-redis中,默认使用的是lettuce作为redis客户端,它与jedis的主要区别如下:Jedis是同步的,不支持异步,Jedis客户端实例不是线程安全的,需要每个线程一个Jedis实例,所以一般通过连接池来使用JedisJedis常用APILettuce是基于Netty框架的事件驱动的Redis客户端,其方法调用是异步的,Lettuce的API也是线程安全的,所以多个线程可以操作单个Lettuce连接来完成各种操作,原创 2020-12-14 11:48:12 · 3353 阅读 · 0 评论 -
Spring websocket 使用@Autowired 出现null
问题在spring websocket 中使用@Autowired 出现空指针异常原因spring管理的都是单例(singleton),和 websocket (多对象)相冲突。websocket在客户端每建立一个链接就会创建一个新的对象,这个对象没有任何的bean注入操作。项目启动时初始化,会初始化 websocket (非用户连接的),spring 同时会为其注入 service,该对象的 service 不是 null,被成功注入。但是,由于 spring 默认管理的是单例,所以只会注入一次原创 2020-12-06 17:02:55 · 464 阅读 · 0 评论 -
实现简单的注解型MVC框架 —— 低配SpringMVC
目标与SpringMvc定义Controller类似效果最终效果展示主类package org.example;import com.zcj.Accepter;import com.zcj.annotation.SummerApplication;import java.io.IOException;//标注控制器类@SummerApplication("org.example.MainController")public class App{ public stat原创 2020-11-15 16:15:36 · 150 阅读 · 0 评论 -
Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案
起因开发过程中在过滤器(filter)中注入Bean出现空指针异常,通过查找资料了解空指针的原因,特此记录。问题分析由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Bean无法注入是在拦截器中无效的问题。SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!“Application类”是指SpringBoot项目入口类。这个类的位置很关键:如果Application类所在的包为:com.root.app原创 2020-10-27 16:16:18 · 2943 阅读 · 0 评论