![](https://img-blog.csdnimg.cn/aa51cc3a805d4b8e89ab8a87de6f6c77.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
spring
文章平均质量分 76
spring那点事
爱琴孩
扫盲+科普+解惑,愿天下程序员每天少掉头发
展开
-
BeanFactory和ApplicationContext那点事
说到 Spring 容器,我们很容易想到 BeanFactory,大家很容易拿到这张图:这张图大致上一看,有七八个能干活的容器,难道 Spring 中真的有这么多种不同的容器吗?那我们不妨想一想,容器的核心职责是什么?我们是否真的需要这么多容器?其实,Spring 中,跟 Bean 最核心的功能相关的容器,只有三个!接下来我们来分析一下。转载 2023-09-25 22:33:16 · 80 阅读 · 0 评论 -
一个接口多个实现类,Spring如何注入其中一个实现类
Controller中注入service的时候使用@Autowired自动注入+@Qualifier("beanId")来指定注入哪一个。注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。Controller中注入service的时候使用。转载 2023-09-24 19:53:16 · 942 阅读 · 0 评论 -
Spring的Bean实例化过程
在所有的准备工作完成之后,如果我们的Bean还有一定的初始化逻辑,那么Spring将允许我们通过两种方式配置我们的初始化逻辑:(1)InitializingBean (2)配置init-method参数。一般通过配置init-method方法比较灵活。转载 2023-07-22 10:19:54 · 70 阅读 · 0 评论 -
模版模式在Spring中的应用
为什么JdbcTemplate没有使用继承?因为这个类的方法太多,但是我们还是想用到JdbcTemplate已有的稳定的、公用的数据库连接,那么我们怎么办呢?我们可以把变化的东西抽出来作为一个参数传入JdbcTemplate的方法中。但是变化的东西是一段代码,而且这段代码会用到JdbcTemplate中的变量。怎么办?那我们就用回调对象吧。在这个回调对象中定义一个操纵JdbcTemplate中变量的方法,我们去实现这个方法,就把变化的东西集中到这里了。原创 2023-07-16 16:21:16 · 549 阅读 · 0 评论 -
使用@Autowired,codeReview时等着被批吧
使用基于字段的依赖注入,高频使用的类随着时间的推移,我们会在类中逐渐添加越来越多的依赖项,我们用着很爽,很容易忽略类中的依赖已经太多了。最近公司升级框架,由原来的spring framerwork 3.0升级到5.0,然后写代码的时候突然发现idea在属性注入的 @Autowired注解上给出警告提示,就像下面这样的,也挺懵逼的,毕竟这么写也很多年了。在使用依赖注入时,受影响的类应该使用公共接口清楚地公开这些依赖项,方法是在构造函数中公开所需的依赖项,或者使用方法(setter)公开可选的依赖项。转载 2023-07-15 09:47:35 · 47 阅读 · 0 评论 -
spring如何处理循环依赖
所谓的循环依赖,就是两个或者两个以上的bean互相依赖对方,最终形成闭环。比如“A对象依赖B对象,而B对象也依赖A对象”,或者“A对象依赖B对象,B对象依赖C对象,C对象依赖A对象”;1、通过构建函数创建A对象(A对象是半成品,还没注入属性和调用init方法)。2、A对象需要注入B对象,发现对象池(缓存)里还没有B对象(对象在创建并且注入属性和初始化完成之后,会放入对象缓存里)。3、通过构建函数创建B对象(B对象是半成品,还没注入属性和调用init方法)。原创 2023-05-13 18:57:21 · 708 阅读 · 0 评论 -
Spring事件监听机制ApplicationEvent
ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。原创 2023-01-28 10:53:14 · 427 阅读 · 0 评论 -
工作3年,没听说过@Transactional失效?
在同一个类中调用错误案例:publicclassA{publicvoidmethodA(){methodB();//其他操作}@TransactionalpublicvoidmethodB(){//写数据库操作}}这类错误适用于所有基于Spring AOP实现的注解。解决这个问题的方法比较简单,还是合理规划好层次关系即可,比如这样:@Se...转载 2021-11-29 20:48:00 · 75 阅读 · 1 评论 -
spring中的@Value乱码问题
在spring配置文件中,如果我们需要配置张三,我们会在配置文件中配置转义之后的张三susan.test.userName=\u5f20\u4e09为什么要做这个转义?假如在配置文件中配置中文的张三:susan.test.userName=张三最后获取数据时,你会发现userName竟然出现了乱码:å¼ ä¸答:在springboot的CharacterReader类中,默认的编码格式是ISO-8859-1,该类负责.properties文件中系统属性的读取。如果系统属性包转载 2021-10-17 19:53:06 · 2936 阅读 · 1 评论 -
撸撸Spring中的BeanFactory
实现方式:BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。实现原理:bean容器的启动阶段: 读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。 然后通过BeanDefinitionRegistry将这些bean注册到bea转载 2021-06-16 10:50:47 · 175 阅读 · 0 评论 -
spring中的@Value读取配置文件的细节处理
前言日常开发中,我们都会经常使用@Value来读取配置文件中配置的属性,这里来和大家简单总结下@Value的使用规则,在开发中尽量少走弯路。@Value不能直接加在静态变量上在项目中,我们可能会定义一个配置类,这个类从配置文件中读取相关属性配置,项目中其他代码通过类名直接访问类里面的静态变量,但是需要注意@Value不能直接加在静态变量上,如下所示这种使用就是错误的@Configurationpublic class ConfigWithNull { @Value("${name原创 2021-02-24 22:05:10 · 1501 阅读 · 1 评论 -
springboot集成springsession实现分布式session共享
前言现在随着分布式,微服务架构的日益成熟,越来越多的企业将传统的单体服务改造成微服务或者分布式架构。当然不是说单体服务现在是百无一用,只能说没有最好的,只要适合就好。在分布式服务改造中,大家都遇到过一个问题,那就是分布式session管理。之前的单体服务session是保存在容器的内存中的。微服务架构中一个服务为了实现高可用都是至少3个点部署,这样就遇到一个问题,就是这个部署在不同服务器上的三...原创 2019-10-27 17:49:52 · 1864 阅读 · 0 评论 -
spring的@Retryable重试机制
前言在很多业务场景中,我们需要用重试机制。比如说在微服务中,服务之间的调用有时候会因为网络波动导致调用失败,这时候代码中进行失败重试就ok了,当然这种重试机制通常会和异步结合使用,否则因为重试导致响应时间变长,这肯定是不行的。至于异步,无论是spring自带的异步机制,还是整合消息中间件。具体异步方式这里不重点讲。当然我们也可以自己用代码逻辑实现重试,不过这种方式不统一,要写一些非业务代码,对...原创 2019-10-19 10:37:19 · 4255 阅读 · 2 评论 -
spring事务那些坑
场景分析最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下:场景A 这里其实是分别执行了两个事物,执行的结果是两个方法都可以插入数据!如下: 场景B Propagation.REQUIRES_NEW的含义表示:如果当前存在事务,则挂起当前事务并且开启一转载 2018-01-21 15:30:53 · 357 阅读 · 0 评论 -
spring中bean的作用域
标题spring作为一个强大的框架,里面包含很多很优秀的功能,其中的依赖注入功能也是一大亮点。spring能帮助开发者去定义Bean,初始化,实现依赖的注入,那么在spring中bean的作用域又有哪些呢?下面简单总结下spring中的作用域。五大作用域简介我们在定义Bean的时候,同时也会定义了该如何创建Bean实例。这些具体创建的过程是很重要的,因为只有通过对这些过程的配置,我们才...转载 2018-07-21 11:42:54 · 547 阅读 · 0 评论 -
Spring中获取request的几种方法,及其线程安全性分析
前言在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在Spring MVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求...转载 2018-08-16 21:58:16 · 136 阅读 · 0 评论 -
Spring中的线程安全性
Spring与线程安全Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。例如,一个scope为singleton的bean,在第一次被注入时,会创建为一个单例对象,该对象会...转载 2018-11-10 09:33:51 · 215 阅读 · 0 评论 -
理理AspectJ,spring aop,CGLIB
前言AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编...转载 2018-11-24 20:10:34 · 142 阅读 · 0 评论 -
Spring 事务用法示例与实现原理
前言关于事务,简单来说,就是为了保证数据完整性而存在的一种工具,其主要有四大特性:原子性,一致性,隔离性和持久性。对于Spring事务,其最终还是在数据库层面实现的,而Spring只是以一种比较优雅的方式对其进行封装支持。本文首先会通过一个简单的示例来讲解Spring事务是如何使用的,然后会讲解Spring是如何解析xml中的标签,并对事务进行支持的。使用示例关于事务最简单的示例,就是...转载 2018-11-24 21:27:25 · 135 阅读 · 0 评论 -
基于注解的spring aop小例子
前言对于spring aop这个话题,大家肯定是觉得是老生长谈的话题了,不管是基于配置文件的aop还是基于注解的aop实现,网上有很多很好的文章。那些大牛们写的文章确实很好,有很多地方值得学习。但是别人写的东西是别人的,你看了别人的文章,并不代表是你已经掌握,还是要多动手,所以这里写了一份基于注解aop的小例子,顺便总结自己对aop的理解。aop的由来在aop出来之前,对于那些横贯于核心业务代码的非原创 2017-08-09 16:31:34 · 783 阅读 · 0 评论