当前位置: 首页 > wzjs >正文

著名的设计网站品牌网站建设毛尖

著名的设计网站,品牌网站建设毛尖,免费注册建网站,西安英文旅游网站建设目录 一、Spring IOC容器概述 二、IOC容器的启动过程 阶段一:容器初始化 1.1创建 ApplicationContext 实例 1.2refresh() 核心流程 阶段二:Bean 实例化与初始化 一、Spring IOC容器概述 Spring IOC(Inversion of Control,控…

目录

一、Spring IOC容器概述

二、IOC容器的启动过程

阶段一:容器初始化

1.1创建 ApplicationContext 实例

1.2refresh() 核心流程

阶段二:Bean 实例化与初始化


一、Spring IOC容器概述

Spring IOC(Inversion of Control,控制反转)容器是Spring框架的核心组件,它负责管理对象的创建、配置和生命周期。IOC容器通过依赖注入(DI)来实现控制反转。


 

二、IOC容器的启动过程

阶段一:容器初始化

1.1创建 ApplicationContext 实例

这是启动的入口。当我们执行 new ClassPathXmlApplicationContext("beans.xml") 或 new AnnotationConfigApplicationContext(AppConfig.class) 时,容器的骨架就建立起来了。在其构造函数内部,会调用核心的 refresh() 方法

1.2refresh() 核心流程
  • 1.2.1 准备阶段 (prepareRefresh): 设置容器的启动时间、状态标记(激活状态),并验证环境中必需的属性。
  • 1.2.2 创建/获取 BeanFactory (obtainFreshBeanFactory): 这是IOC容器的核心。此步骤会创建一个 DefaultListableBeanFactory 实例,并开始加载Bean的“定义信息”(BeanDefinition)。
    • XML方式: 解析XML文件,将每个 <bean> 标签转换成一个 BeanDefinition 对象。
    • 注解方式: 扫描指定的配置类(@Configuration)和包路径,将带有 @Component、@Service、@Bean 等注解的类转换成 BeanDefinition 对象。
    • 注意: 此时只是加载了Bean的“图纸”(元数据),还没有创建任何Bean的实例。

               

  • 1.2.3 准备 BeanFactory (prepareBeanFactory): 对 BeanFactory 进行一系列的设置,比如设置类加载器(ClassLoader)、添加默认的 BeanPostProcessor(Bean后置处理器)等,为后续Bean的创建做好准备。
  • 1.2.4 BeanFactory 后置处理 (invokeBeanFactoryPostProcessors): 这是一个非常重要的扩展点。Spring会查找并调用所有实现了 BeanFactoryPostProcessor 接口的Bean。这些处理器可以在所有Bean实例创建之前,读取并修改 BeanDefinition 的元数据。
    • 常见应用: PropertySourcesPlaceholderConfigurer 就是一个典型的例子,它会扫描 BeanDefinition 并将 ${...} 占位符替换为配置文件中的实际值。
  • 1.2.5 注册 BeanPostProcessor (registerBeanPostProcessors): 查找并注册所有实现了 BeanPostProcessor 接口的Bean。这些处理器将会在后续Bean实例化的各个阶段被调用,用于对Bean实例本身进行增强处理(例如AOP代理)。注意,这里只是注册,并不会立即执行。
  • 1.2.6 初始化其他组件: 初始化消息源(用于国际化)、事件广播和注册事件监听器。
  • 1.2.7 实例化所有非懒加载单例Bean (finishBeanFactoryInitialization): 容器会遍历所有 BeanDefinition,并主动创建所有作用域为singleton、非lazy-init的Bean。这个过程会触发下面描述的“Bean实例化”阶段。
  • 1.2.8 完成刷新 (finishRefresh): 发布 ContextRefreshedEvent 事件,通知所有监听器容器已经刷新完成。这标志着IOC容器已经完全准备就绪。

阶段二:Bean 实例化与初始化

这个阶段由上一步的 finishBeanFactoryInitialization 触发,对每一个单例Bean进行创建。

  1. 实例化 (Instantiation): Spring通过反射CGLIB调用Bean的构造函数,创建出一个空白对象。
  2. 填充属性 (Populate Properties): Spring根据 @Autowired、@Resource 等注解或XML配置,进行依赖注入(DI),将该Bean依赖的其他Bean或值设置到其属性中。

    此时可能会出现循环依赖问题,spring使用三级缓存来解决此问题详细请看这篇博客

  3. 调用Aware接口: 如果Bean实现了 BeanNameAwareBeanFactoryAwareApplicationContextAware 等接口,Spring会调用相应的方法,将Bean的名称、所在的工厂、所在的上下文等信息注入进来。
  4. BeanPostProcessor 前置处理: 调用所有已注册的 BeanPostProcessor 的 postProcessBef  oreInitialization 方法。这是一个在Bean初始化(init-method)之前进行干预的机会。
  5. 初始化 (Initialization): 调用Bean自身的初始化方法。如果Bean上定义了 @PostConstruct 注解的方法,或者在XML中配置了 init-method,它们会在此处被执行。
  6. BeanPostProcessor 后置处理: 调用所有已注册的 BeanPostProcessor 的 postProcessAfterInitialization 方法。这是另一个极其重要的扩展点。

    常见应用: Spring AOP的代理对象就是在这里生成的。AbstractAutoProxyCreator 这个后置处理器会检查当前Bean是否需要被代理,如果需要,它会返回一个代理对象来替换原始的Bean实例。所以我们从容器中获取的可能是原始对象,也可能是一个代理对象。

  7. 放入单例池: 经过以上所有步骤后,一个完整的Bean就创建好了。它会被放入一个Map(通常称为“单例缓存池”或“Singleton Cache”)中,以便后续直接获取。

至此,整个Spring IOC容器的启动流程就完成了。现在,应用程序可以使用 context.getBean() 来获取任何已经初始化好的Bean实例了

                 

 

 


文章转载自:

http://ixjBo5HU.Lnckq.cn
http://ehSyBDjQ.Lnckq.cn
http://95nqETOD.Lnckq.cn
http://wpPUf2te.Lnckq.cn
http://2u77WeGL.Lnckq.cn
http://XJvzIZLH.Lnckq.cn
http://rR4TbiXR.Lnckq.cn
http://GVW1xA8d.Lnckq.cn
http://LYxW22Lz.Lnckq.cn
http://SCo8IKHr.Lnckq.cn
http://NMFKcdiO.Lnckq.cn
http://Ry59p2qA.Lnckq.cn
http://OB1LyYfz.Lnckq.cn
http://UFU8NQjU.Lnckq.cn
http://edFrC413.Lnckq.cn
http://IpGDPDY7.Lnckq.cn
http://UPHlrPWa.Lnckq.cn
http://IaNtACTa.Lnckq.cn
http://pI4y8Uv3.Lnckq.cn
http://PPkE6qXS.Lnckq.cn
http://CgbmZdby.Lnckq.cn
http://4GQ9hTN9.Lnckq.cn
http://etw0yktv.Lnckq.cn
http://mqo4jMis.Lnckq.cn
http://a7ydsNAT.Lnckq.cn
http://hcpJh83R.Lnckq.cn
http://x7LSOlrZ.Lnckq.cn
http://sJPIdz5b.Lnckq.cn
http://Th75Zbd5.Lnckq.cn
http://OxnkrDK8.Lnckq.cn
http://www.dtcms.com/wzjs/712091.html

相关文章:

  • 郑州网站建设 新浪博客抚顺地区网站建设
  • 廊坊高端品牌网站建设网站建设怎么选择MySQL数据库大小
  • 做视频类网站需要哪些许可证宁波网站制作费用
  • 中文域名转码网站网络设计院
  • 哪里有建站代理加盟手机网站设计要素
  • 哪些网站是用h5做的关于网站建设的工作总结
  • 上海建设集团网站拓者设计室内设计网
  • 做网站还是app市场营销策划
  • 响应式网站开发有哪些框架南昌优化排名推广
  • 第四章第二节网站建设的教学设计搜索排名的影响因素
  • 影音先锋资源网站建设河南安阳区号是多少
  • 可视化建网站网店装修免费模板
  • 深圳罗湖企业网站推广做网站申请哪类商标
  • 聊城集团网站建设做旅游去哪个网站找图
  • 百度推广网站怎么做网络营销的特点包括哪些
  • 江安网站建设定州国际陆港项目
  • 什么是 网站收录html5网站开发环境
  • 制作网页网站用的是什么网站设计开发中的具体步骤
  • 沈阳网站建设 成创网站从域名
  • 单页网站 seowordpress 后台代码
  • 天津品牌网站建设公司哪家好wordpress打不开后台
  • 网文网站排名wordpress移动端视频
  • 网站空间租用做网站赚钱什么类型
  • 专业做蛋糕的网站nginx建设网站教程
  • 子洲网站建设制作百度竞价电话
  • 电子商务网站管理分销系统开发公司
  • iis7 网站无法显示该页面微信安装到手机
  • 网站怎么做uc整合wordpress评分点评
  • 本地建设多个网站链接建设银行关方网站
  • 口碑好的定制网站建设公司泰安集团网站建设方案