首页 > 其他分享 >Spring中关于@Autowired注解和@Value注解的处理

Spring中关于@Autowired注解和@Value注解的处理

时间:2023-12-18 18:33:41浏览次数:27  
标签:缓存 Autowired Spring Bean bean 实例 单例 创建 注解

Spring是在实例化之后、初始化之前调用BeanPostProcessor处理的。

///////////////////////////////////////////////////////////////////////////
// AbstractApplicationContext >>>> refresh()
///////////////////////////////////////////////////////////////////////////

/**
 * 【步骤11:将beanFactory的成员补充完毕,并初始化所有非延迟单例 bean】
 * conversionService:也是一套转换机制,作为对 PropertyEditor 的补充
 * embeddedValueResolvers:即内嵌值解析器,用来解析 @Value 中的 ${ },借用的是 Environment 的功能
 * singletonObjects:即单例池,缓存所有单例对象
 * 主要的创建流程如下:
 * (0)创建bean实例之前,若是InstantiationAwareBeanPostProcessor,则执行其applyBeanPostProcessorsBeforeInstantiation和applyBeanPostProcessorsAfterInitialization方法,
 *  无需再实例化,直接返回
 * (1) 创建bean实例, 即调用对象的构造方法实例化对象
 * (2) populateBean设置属性:主要对 bean 的依赖属性注入(@Autowired、@Value)
 * (3) initializeBean初始化
 *  - 触发BeanNameAware、BeanFactoryAware的相关方法
 *  - 执行BeanPostProcessor的postProcessBeforeInitialization方法
 *  - 执行InitializingBean的afterPropertiesSet方法
 *  - 执行自定义的init-method方法
 *  - 执行BeanPostProcessor的postProcessAfterInitialization方法
 *
 * (4) 实例化所有的非延迟单例bean后,会调用实现了SmartInitializingSingleton接口的单例bean的afterSingletonsInstantiated方法
 *
 * 此处用到了三级缓存用于处理单例bean的循环依赖(DefaultSingletonBeanRegistry的三个HashMap):
 *  - 一级缓存:singletonObjects 存放完全实例化且属性赋值完成的 Bean, 可以直接使用
 *  - 二级缓存:earlySingletonObjects 放早期 Bean 的引用,尚未装配属性的 Bean
 *  - 三级缓存:singletonFactories 存放实例化完成的 Bean 工厂
 *
 * 除了三级缓存,还有另外两个缓存
 *  - singletonsCurrentlyInCreation: bean 在创建的过程中都会存储在此,创建完成移出
 *  - alreadyCreated:存放至少被创建一次的 bean,不会重复。即标记 bean 是否创建完成
 **/
finishBeanFactoryInitialization(beanFactory);

 

标签:缓存,Autowired,Spring,Bean,bean,实例,单例,创建,注解
From: https://www.cnblogs.com/xfeiyun/p/17911797.html

相关文章

  • SpringSession+SpringSecurity中如何保存Authentication到Session中的Attribute
     org.springframework.security.web.context.SecurityContextPersistenceFilter#doFilter(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,javax.servlet.FilterChain) org.springframework.security.web.context.HttpSessionSecurityC......
  • springboot配置文件的优先级
     1配置文件不同位置优先级不同 文件路径相对目录级别 classpath:application.ymlresources目录最低-程序员classpath:config/application.yml resources目录下的config目录项目经理file:application.ymljar包所在目录下的config目录运维file:co......
  • springboot 连接工具
    ### server:port:9999mybatis-plus:configuration:map-underscore-to-camel-case:truelog-impl:org.apache.ibatis.logging.stdout.StdOutImpltype-aliases-package:com.itfangyi.pojomapper-locations:classpath:Mapper/*.xmlspring:datasource:......
  • SpringSession中的sessionId什么时候会过期
    使用SpringSession后,每次请求后,都会把期间变更的attribute保存到redis中。每次访问都会修改lastAccessTimeorg.springframework.session.web.http.SessionRepositoryFilter#doFilterInternal org.springframework.session.data.redis.RedisIndexedSessionRepository.RedisSes......
  • Spring Boot学习随笔- JSP小项目-员工管理系统(验证码生成、增删改查)
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十章、项目开发实现一个登录注册,增删改查功能的系统10.1项目开发流程需求分析分析用户主要需求提取项目核心功能,根据核心功能构建页面原型库表设计:分析系统有哪些表分析表之间关联关系确定字段详细设......
  • Java Spring Boot 集成 Swagger 生成 API文档(SpringDoc)
    在我们进行项目开发的时候,有些文档是必不可少的,或者也有利于自己查阅,比如API接口文档。在SpringBoot中通常有有个选择:springfoxspringdoc因为springfox和SpringBoot版本适配问题是个坑,这里我们选用更加友好的springDoc,而且用起来更顺手,很丝滑。以下是环境:Spring......
  • SpringBoot 2项目中,serviceA的方法中调用了serviceB的方法能触发事务吗
    需求描述在一个SpringBoot2.x项目中,有一个需求是在serviceA的method1方法中执行两个数据库操作,并在其中的某一步调用了serviceB的method2,而method2也包含了数据库操作。如果在这个过程中发生了异常,希望能够确保所有的数据库操作都能够回滚,以保持数据的一致性。该如何在代码中实现......
  • SpringBoot异步任务获取HttpServletRequest
     前言在使用框架日常开发中需要在controller中进行一些异步操作减少请求时间,但是发现在使用@Anysc注解后会出现Request对象无法获取的情况,本文就此情况给出完整的解决方案原因分析@Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null在使用spr......
  • spirng、springboot、jdk、maven、tomcat版本问题
    引入springboot依赖时会自动安装spring对应依赖,版本由springboot决定。springboot2.x.x及以下使用jdk11、jdk8都可以,springboot3.x.x最低要求jdk17maven与jdk版本关系,参照链接:https://maven.apache.org/docs/history.htmlApacheTomcat是JakartaEE(JavaEE)技术子集的开源......
  • 数据持久层框架mybatis学习:使用mybatis+SpringBoot完成增删改查
    目录一、MyBatis的应用配置二、使用mybatis+SpringBoot完成增删改查2.1代码实现2.2增删改查接口调用一、MyBatis的应用配置依赖pom.xml注意:版本号的依赖冲突问题<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xm......