Spring
文章平均质量分 52
virtuousOne
virtuousOne
展开
-
spring bean生命周期四---Initialization阶段
使用场景:实现SmartInitializingSingleton的接口后,当所有单例 bean 都初始化完成以后, Spring的IOC容器会回调该接口的 afterSingletonsInstantiated()方法。主要是回调:SmartInitializingSingleton#afterSingletonsInstantiated。Spring Bean 初始化完成阶段。Spring Bean 初始化后阶段。属性填充后,就是初始化值。原创 2022-11-20 22:38:31 · 139 阅读 · 0 评论 -
spring bean生命周期三---PopulateBean阶段
postProcessAfterInstantiation()方法,可以决定是否进行属性填充,只要有一个返回了false,都会终止属性填充的过程。自动装配:autowiring自动装配,根据ByName或者ByType。提取依赖的bean,并统一存入到 propertyValues 中。filterPropertyDescriptorsForDependencyCheck()方法。@Autowired 和 @Resource 的注入工作主要是通过。实例化Bean之后,就是对Bean的属性进行注入的过程。原创 2022-11-20 22:00:10 · 164 阅读 · 0 评论 -
Spring之Bean生命周期之二--- Instantiation阶段
Spring Bean 实例化前阶段、Spring Bean 实例化阶段、Spring Bean 实例化后阶段等阶段。第二次调用后置处理器determineCandidateConstructors获取最优构造方法实例化对象。有参创建 :推断处理的 构造器方法不为null或者开启自动装配或者 使用指定入参的构造方法。第四次调用后置处理器getEarlyBeanReference解决循环依赖的问题。在BeanFactory中,主要的流程就是创建Bean的过程,实例化Bean在源码中。原创 2022-11-20 21:40:50 · 483 阅读 · 1 评论 -
Spring之Bean生命周期之一----BeanDefinition生成阶段
三个条件表达的意思是: mbd 中如果nonPublicAccessAllowed字段的值为true,表示class是非公开类型的,也可以创建实列。在Spring源码中,从AbstractAutowireCapableBeanFactory类的 createBean()方法开始。在doCreateBean()方法中,有一个createBeanInstantce方法,该方法即为将bean实例化;在该方法中,具体创建Bean的是doCreateBean()方法。条件3: 说明配置了 构造参数信息。原创 2022-11-13 21:41:49 · 454 阅读 · 0 评论 -
Spring底层核心概念
在深入Spring核心源码之前,需要了解一些Spring的核心概念,便于后面的进行展开。原创 2022-10-31 16:50:30 · 1112 阅读 · 0 评论 -
@Async注解的使用方法
第二个问题:在spring boot中,如果没有自定义线程池实例,那么Spring boot会使用默认的线程池,这个默认线程池是SimpleAsyncTaskExecutor,这种线程池是会为每个任务创建一个线程去执行,可能会引起资源问题。第一个问题: 注解里面的线程池是无界队列LinkedBlockingQueue,这导致最大线程数的配置是无效的,且如果异步线程很多执行时间很长,会导致任务一直堆在队列中,任务延迟很大。2.开启后,如果两个方法再同一个类里面,也是不会执行的。...原创 2022-08-06 13:09:31 · 4384 阅读 · 0 评论 -
Spring之getBean(二)
今天继续对Spring加载bean的相关进行了了解。会发现在getBean()操作的时候,有一段代码.如果是单实列的话,没有找到的话,会进行createBean。 if (mbd.isSingleton()) { // 第二个getSingleton,更倾向于创建 sharedInstance = getSingleton(beanName, () -> { try { // 创建bean return createBean(beanNa原创 2022-03-05 20:29:14 · 218 阅读 · 0 评论 -
Spring源码中getBean的简单流程
在学习Sring的时候,免不了经常见如下的代码 VirtuousApplicationContext applicationContext = new VirtuousApplicationContext(AppConfig.class); UserInterFace userInterFace = (UserInterFace) applicationContext.getBean("userService");这就是Spring给我们造的轮子,于是这次就深入了解了下Spring的bean的加载流原创 2022-02-20 21:49:35 · 416 阅读 · 0 评论 -
Spring源码入门(一)之-----循环依赖
Spring是如何解决循环依赖问题的?这个问题算是关于Spring的一个高频面试题,如果不刻意研读,即使度过源码,面试者也不一定能够一下子回答得上。什么是循环依赖?循环依赖其实就是对象之间的循环引用,即两个或两个以上的Bean互相持有对方,最终形成闭环。Spring 循环依赖有几种方式?1.原型模式循环依赖【无法解决】 如果是单列的话,就不会报错Spring默认的单列(Singleton)的场景是支持循环依赖的,不报错原型(Prototype)的场景是不支持循环依赖的,会报错2.单列Bea原创 2021-10-10 15:45:39 · 244 阅读 · 0 评论 -
Spring源码入门--(idea构建spring源码)
工欲善其事必先利其器,在开始学习spring源码之前,要先要搭建好自己的spring源码环境。接下来就介绍下如何搭建Spring源码的环境。进行注释和编译。1.下载Spring的源码。https://gitee.com/mirrors/Spring-Framework?_from=gitee_search2.接下来我们先下载和安装一下Gradlehttps://services.gradle.org/distributions/3.接下来就是对下载的源码进行Gradle的相关配置。在grad原创 2021-09-20 17:37:02 · 551 阅读 · 1 评论