spring
文章平均质量分 90
liangsheng_g
这个作者很懒,什么都没留下…
展开
-
DependsOn注解失效问题排查
@DependsOn注解失效分析及解决原创 2023-10-08 20:14:33 · 1082 阅读 · 0 评论 -
手写简单的spring(2):实现循环依赖
文章目录前言一、前期辅助1.1 最朴素的想法1.2 真的这么丝滑么二、使用步骤1.引入库2.读入数据总结前言相信凡是写Java的同学都知道或者背过Spring实现循环依赖的方式吧,无非是三个缓存工厂,然后每个工厂放object的什么形态,bla-bla之类的。之前我也写过一篇博客,图解过 。不过,如果我们自己来实现,该如何写呢?接着我们上一篇的博客,继续探索一下。一、前期辅助1.1 最朴素的想法既然我们需要实现一个循环依赖,那么我们首先来写个demopublic class CycleSer原创 2022-04-04 19:30:11 · 534 阅读 · 0 评论 -
手写简单的spring(1):了解Spring的原理
通过简单的代码模拟来解释Spring到底是怎么实现的原创 2022-03-09 20:30:24 · 290 阅读 · 0 评论 -
Spring的AOP执行顺序
Spring中的Advisors的执行顺序原创 2022-01-26 19:42:36 · 3362 阅读 · 0 评论 -
单元测试加上@Transactional就能实现回滚【原理】
单元测试自动回滚原创 2021-12-18 08:22:28 · 3098 阅读 · 0 评论 -
添加@Async注解,导致spring启动失败
文章目录前言一、异常表现,抛出内容1.1循环依赖的两个class1.2 启动报错二、原因分析2.1 主要原因2.2 循环依赖放入二级缓存处逻辑2.3 initializeBean生成的对象2.4 再次分析原因总结前言在这篇文章里,最后总结处,我说了会讲讲循环依赖中,其中一个类添加@Async有可能会导致注入失败而抛异常的情况,今天就分析一下。一、异常表现,抛出内容1.1循环依赖的两个classCycleService1@Servicepublic class CycleService1原创 2021-08-29 10:22:42 · 3154 阅读 · 4 评论 -
spring源码解读:@Async的原理——默认配置
文章目录前言一、如何使用@Async二、源码解读1.@EnableAsync的作用2. AsyncConfigurationSelector的作用3. adviceMode:PROXY(默认值)3.1 ProxyAsyncConfiguration3.2 AsyncAnnotationBeanPostProcessor3.3 AsyncAnnotationAdvisor3.3.1 buildAdvice3.3.1.1 AnnotationAsyncExecutionInterceptor,异步执行的原理3.原创 2021-08-22 21:38:29 · 1285 阅读 · 0 评论 -
spring循环依赖原理图解+bean的生命周期图解
Spring是如何处理循环依赖的,又是怎么做到,互相注入对方的proxy bean而不是raw bean的?现在就分析一下循环依赖其实耐下功夫读源码,也没有那么难。下次分享为什么循环依赖的其中一个类添加@Async有可能会导致注入失败而抛异常–这篇博客。原创 2021-08-15 12:20:57 · 332 阅读 · 0 评论 -
基于Spring,属性注入动态对象
文章目录前言一、思路二、使用步骤1.注入对象类型必须是接口2. 注入的实际对象必须是一个ObjectFactory3. 注入的对象属性必须在DefaultListableBeanFactory#resolvableDependencies里4. 测试实现三、ObjectFactory 和 FactoryBean3.1 ObjectFactory3.2 FactoryBean四、一个新方案(prototype + @Lazy)4.1 将WangObj的作用域scope改为prototype4.2 将WangO原创 2021-08-10 12:27:16 · 617 阅读 · 0 评论 -
spring源码解读:@Lazy延迟注入的逻辑
文章目录前言一、一个简单的小例子二、源码解读1. 注入2. 使用逻辑总结前言有时候我们会在属性注入的时候添加@Lazy注解实现延迟注入,今天咱们通过阅读源码来分析下原因一、一个简单的小例子代码如下:@Servicepublic class NormalService1 { @Autowired @Lazy private MyService myService; public void doSomething() { myService.getName(); }}作用原创 2021-08-03 18:11:39 · 1228 阅读 · 3 评论 -
@ControllerAdvice和@ExceptionHandler的原理
文章目录前言一、简单使用1. jar的引入2. 废话不多说,上代码二、查看原理1.抽丝剥茧1.1 WebMvcAutoConfiguration2.读入数据总结前言现在大家都习惯使用Spring框架了,而且平时的业务系统中的异常捕捉及处理都是靠@ControllerAdvice和@ExceptionHanlder两个注解配合使用的。一、简单使用1. jar的引入其实我不写,哈哈哈哈。看了下这两个注解都是spring-web里的,不过因为现在一般项目都是使用springboot启动的,所以不用自原创 2021-04-22 20:43:05 · 951 阅读 · 1 评论 -
利用ThreadLocal和StopWatch实现一个简单的埋点计时工具
文章目录前言一、一般做法二、更优雅的做法1. 考虑线程的概念2. 考虑如何计时3. 优化的计时方法类总结前言写代码的时候,我们有时候需要获取方法调用详细耗时。一、一般做法一般情况下,对于接口调用耗时,简单的做法都是通过System.currentTimeMillis()来获取时间,然后分别相减,获取某个代码块的执行耗时; public ApiResponseEntity exTest() { long start = System.currentTimeMillis();原创 2021-04-21 21:50:13 · 941 阅读 · 0 评论 -
@Autowired注解的原理、源码
文章目录前言一、@Autowired怎么使用?二、注入干了啥1.查找一个类的所有注入点1.1 在Spring中Bean的生态位置1.2 detail,源码解读2.读入数据总结前言@Resource注解和@Autowired注解是咱们使用Spring的两大利器,用来进行属性注入。在上一篇文章中,我们解析了@Resource的源码,同时在总结里解释了下为什么@Resource被称为先按byName后按byType进行依赖注入。今天咱们来分析下@Autowired注解的源码和原理。一、@Autowired原创 2021-03-24 11:55:32 · 458 阅读 · 0 评论 -
@Resource注解的原理、源码
文章目录前言一、@Resource怎么用?二、那么注入做了些啥1.查找一个类的所有注入点1.1 在Spring中Bean的生态位置1.2 detail,源码解读2. 注入2.1 在Spring中bean的生态的位置总结前言@Resource注解和@Autowired注解是咱们使用Spring的两大利器,用来进行属性注入。这篇文章来简单分析下@Resource的原理一、@Resource怎么用?很简单的啦,譬如如下:@Servicepublic class TestService {原创 2021-03-15 21:07:38 · 1150 阅读 · 0 评论 -
Spring源码解读:Spring的Event编程以及实现原理
文章目录前言一、使用传统方式观察者模式二、源码解读1.引入库2.读入数据总结前言要想代码写得好,设计模式不可少。Spring框架启动过程中,有两个设计模式使用较多,一个是观察者模式,一个是processor处理时用的链式模式。今天我们来介绍观察者模式的Event一、使用传统方式咱们写业务代码,经常会涉及到某种业务场景,譬如A的改变,B或者C需要知道,以便改变。一般程序员写代码可能会写成下面这种@Servicepublic class AService { @Autowired pr原创 2021-02-02 18:08:54 · 841 阅读 · 1 评论 -
Spring源码解读:@Transactional原理(2)
文章目录前言一、类图二、MethodInterceptor#invoke1.方法拦截器?2.TransactionInterceptor#invoke3. TransactionAspectSupport#invokeWithinTransaction3.1 createTransactionIfNecessary3.1.1 AbstractPlatformTransactionManager#getTransaction,获取事务状态TransactionStatus3.1.1.1 调用当前事务方法前,已原创 2021-01-26 19:39:31 · 464 阅读 · 0 评论 -
基于AOP+Redis实现一个简单频控拦截器
文章目录前言一、定义注解二、Aspect三、使用示例总结前言为了实现频控,并且可插拔形式,那么AOP无疑是一个非常好的选择。咱们这个Aspect实现依赖了redis一、定义注解今天咱们做一个简单的频控组件,可以实现某个接口针对某个用户某个时间段只能调用1次注解如下:@Inherited@Documented@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface FrequencyC原创 2021-01-26 15:27:31 · 987 阅读 · 0 评论 -
Spring源码解读:@Transactional原理(1)
文章目录前言一、@Transactional的作用二、@Transactional如何生效的1.@EnableTransactionManagement2. AutoProxyRegistrar3 ProxyTransactionManagementConfiguration3.1 advisor中的pointCut总结小结AOP前言这篇文章来讲讲Spring的重要组成部分@Transactional注解是如何生效的一、@Transactional的作用写java的都知道,这个注解是用来给方法添加原创 2020-12-31 15:41:27 · 507 阅读 · 0 评论 -
Spring源码解读:Spring注入Request原理
文章目录前言一、来个例子二、解析一下1. 为啥会打印Current HttpServletRequest2. 既然是Spring注入的对象,为啥能做到动态变化3. 为啥此ObjectFactory.getObject()能够拿到不停变化的对象总结前言之前我在这篇文章说过Spring往容器里管理了Request对象,所以你可以在spring的任何实例里面注入HTTPRequest对象。具体是怎么实现的呢?今天就来更详细地分析下~一、来个例子示例:pandas 是基于NumPy 的一种工具,该工具是原创 2020-12-08 15:53:05 · 1204 阅读 · 0 评论 -
Spring源码学习(四):容器ApplicationContext的refresh(2)- 执行BeanFactoryPostProcessor
文章目录前言一、BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor是什么二、Spring执行这些PostProcessor的步骤1. BeanDefinitionRegistryPostProcessor优先级高2. 开始执行Spring容器里的BeanDefinitionRegistryPostProcessor2.1 执行了PriorityOrder接口的BeanDefinitionRegistryPostProcessor2.2 C原创 2020-12-01 18:39:51 · 106 阅读 · 0 评论 -
Spring源码学习(三):容器ApplicationContext的refresh(1)
文章目录前言一、Springboot中的refreshContext二、AbstractApplicationContext的refresh1.引入库2.读入数据总结前言第一篇地址,主要讲ApplicationContext的初始化-create:Spring源码学习(一):Spring容器创建和初始化工作准备第二篇地址,主要讲ApplicationContext的准备工作-prepare:Spring源码学习(二):Spring容器之prepareContext和BeanFactoryPostPr原创 2020-11-17 11:44:03 · 199 阅读 · 0 评论 -
Spring源码学习(二):Spring容器之prepareContext和BeanFactoryPostProcessor的介绍
文章目录前言一、Springboot中prepareContext1.1 获取提前放入的sources1.2 把sources生成BeanDefinition放入到spring容器中二、BeanFactoryPostProcessor的介绍2.1 BeanFactoryPostProcessor2.2 BeanDefinitionRegistryPostProcessor2.3 ConfigurationClassPostProcessor总结继续跟随Springboot的启动过程分析spring的源码原创 2020-11-10 18:56:12 · 228 阅读 · 1 评论 -
Spring源码学习(一):Spring容器创建和初始化工作准备
文章目录前言一、Spring是什么?二、探究1. Spring容器启动1.1 容器类型(contextClass)的判断1.2 容器的实例化2. 容器的创建及实例化过程2.1 构造方法读下去2.1.1 scanner的作用2.1.2 reader的作用总结前言基于学习遗忘曲线收敛太快,决定将Spring源码的解读记录下来。今天是第一篇,容器的启动那就开始吧~一、Spring是什么?用java的应该都清楚Spring框架是什么,目前市面上的主流java框架也都会做和Spring的结合。Sprin原创 2020-11-09 11:54:43 · 284 阅读 · 2 评论 -
@EnableAutoConfiguration的使用和原理
Springboot @EnableAutoConfiguration原理Springboot是如何加载@EnableAutoConfiguration1. 如何把自己的配置类加入到Spring容器中呢?1.1 spring.factories2. 探究Springboot是如何加载我们的配置类的2.1 注解介绍2.1.1 @SpringbootApplication注解是什么2.1.2 @SpringbootConfiguration注解2.1.3 @EnableAutoConfiguration注解2.原创 2020-11-08 18:46:53 · 3695 阅读 · 0 评论