首页 > 其他分享 >初始化BeanFactory专项:obtainFreshBeanFactory16

初始化BeanFactory专项:obtainFreshBeanFactory16

时间:2024-09-05 13:55:24浏览次数:8  
标签:初始化 BeanFactory Bean 实例 刷新 obtainFreshBeanFactory obtainFreshBeanFactory16

一、IOC容器的刷新环节快速回顾

public abstract class AbstractApplicationContext implements ApplicationContext {
 
    @Override
    public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            // 准备上下文环境,包括初始化工厂、后置处理器等
            prepareRefresh();
 
            // 创建并初始化 BeanFactory
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
 
            // 设置 BeanFactory 的类加载器、资源加载器等
            prepareBeanFactory(beanFactory);
 
            try {
                // 允许子类对 BeanFactory 进行进一步的自定义处理
                postProcessBeanFactory(beanFactory);
 
                // 调用 BeanFactoryPostProcessors 进行后置处理
                invokeBeanFactoryPostProcessors(beanFactory);
 
                // 注册 BeanPostProcessors,用于对 Bean 实例进行后置处理
                registerBeanPostProcessors(beanFactory);
 
                // 初始化消息源
                initMessageSource();
 
                // 初始化事件广播器
                initApplicationEventMulticaster();
 
                // 初始化其他特殊 Bean
                onRefresh();
 
                // 注册关闭钩子
                registerListeners();
 
                // 初始化所有剩余的单例 Bean
                finishBeanFactoryInitialization(beanFactory);
 
                // 完成上下文刷新
                finishRefresh();
            } catch (BeansException ex) {
                if (logger.isWarnEnabled()) {
                    logger.warn("Exception encountered during context initialization - " +
                            "cancelling refresh attempt: " + ex);
                }
                // 销毁已创建的 Bean,关闭容器
                destroyBeans();
                // 重置容器刷新标志,允许再次刷新
                cancelRefresh(ex);
                // 把异常重新抛出,允许调用者处理
                throw ex;
            } finally {
                // 重置已注册的 JVM 关闭钩子
                resetCommonCaches();
            }
        }
    }
}

二、创建并初始化BeanFactory-obtainFreshBeanFactory源码分析

(一)refreshBeanFactory

(二)getBeanFactory

三、Spring注解驱动配置方式来定义和管理Bean的obtainFreshBeanFactory

(一)常见注解回顾

@Component:标记一个类为Spring的组件,即一个Bean。

@Autowired:自动注入依赖

@Configuration:标记一个类为配置类,可以定义多个Bean

@Bean:声明一个Bean,由Spring容器管

@ComponentScan:指定要扫描的包,Spring会自动扫描这些包下的组件

(二)注解驱动中的具体实现obtainFreshBeanFactory

AnnotationConfigApplicationContext实现分析

 refreshBeanFactory

 getBeanFactory

四、Spring XML驱动 (XML-Driven) 配置方式来定义和管理Bean的obtainFreshBeanFactory

(一)基本配置和启动

(二)XML驱动 (XML-Driven) 具体实现obtainFreshBeanFactory

ClassPathXmlApplicationContext实现分析

 refreshBeanFactory

l oadBeanDefinitions

 getBeanFactory

五、obtainFreshBeanFactory总结

obtainFreshBeanFactory 方法总结:

刷新 BeanFactory:方法首先调用 refreshBeanFactory 方法,该方法负责刷新 BeanFactory。在这个过程中,旧的 BeanFactory 实例将被销毁,新的 BeanFactory 实例将被创建和初始化,确保了每次获取 BeanFactory 时都可以获取到最新的实例,从而保持应用程序的状态和配置的一致性。

获取 BeanFactory:方法接着调用 getBeanFactory 方法,该方法返回已经刷新的 BeanFactory 实例。如果在刷新 BeanFactory 过程中发生异常,可能会抛出 BeansException,应用程序可以根据需要进行处理。

返回 BeanFactory:最后,方法将获取到的 BeanFactory 实例返回给调用者,以便它可以在应用程序中使用,BeanFactory 是整个 Spring 应用程序的核心,它负责管理应用程序中的所有 Bean 实例。

总的来说,obtainFreshBeanFactory 方法的作用是确保每次获取 BeanFactory 时都可以获取到最新的、已经刷新的 BeanFactory 实例,从而保证了应用程序的状态和配置的一致性。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/xiaofeng10330111/article/details/139667021

                        
原文链接:https://blog.csdn.net/xiaofeng10330111/article/details/139667021

标签:初始化,BeanFactory,Bean,实例,刷新,obtainFreshBeanFactory,obtainFreshBeanFactory16
From: https://blog.csdn.net/m0_74022416/article/details/141928857

相关文章

  • 部署K8S集群(二):主节点初始化
    主节点:以下操作只在master进行安装kubeletkubeadmkubectlyuminstall-ykubeletkubeadmkubectl安装containerd下载地址:https://github.com/containerd/containerd/releases找到标签为Latest的包,根据系统类型下载对应的包#解压tarCxzvf/usr/localcontainerd-1......
  • Kubernetes学习指南:保姆级实操手册04——主机系统初始化
    四、Kubernetes学习指南:保姆级实操手册04——主机系统初始化前言:本章节主要内容是对主机操作系统的初始化操作,如发另外标注,所有的节点操作步骤一致,可以使用软件批量初始化。1.检查系统端口确保以下端口未被占用:运行后未有任务显示,表示端口未被占用。[root@k8s-master01~]#ss-......
  • kubernetes初始化集群时报错
    报错:kubernetes初始化端口占用及文件存在(本人是之前初始化过一次)[root@master~]#kubeadminit--apiserver-advertise-address=192.168.20.200--image-repository=registry.aliyuncs.com/google_containers--kubernetes-version=v1.28.0--pod-network-cidr=10.244.0.0/16--......
  • C++11新初始化方法 使用{}初始化变量
    列表初始化在C++11及以后的版本中,使用{}来初始化变量是一种新的初始化方法,称为列表初始化(ListInitialization)。这种初始化方法可以用来初始化内置类型、自定义类型以及聚合类型。示例代码:/*AVL树节点类*/structTreeNode{ intval{}; intheight=0; TreeNode*left{};......
  • C安全编程教学-声明和初始化-不要声明或者定义保留标识符(三)
    注:本课程参考文献《C安全编码标准》 欢迎关注我......
  • BeanFactory和FactoryBean
    BeanFactory和FactoryBean先说结论:BeanFactory和FactoryBean都是接口。BeanFactory:是IOC容器,并且提供方法支持外部程序对这些Bean的访问,在程序启动时根据传入的参数产生各种类型的Bean,并添加到IOC容器(实现BeanFactory接口的类)的SingletonObject属性中。FactoryBean:首先是个Bea......
  • 《NET CLR via C#》---第十章(无参属性,对象和集合初始化器,匿名类型,元组,有参属性)
    面向对象设计和编程的重要原则之一就是数据封装,意味着类型的字段永远不应该公开,否则很容易因为不恰当使用字段而破坏对象的状态。无参属性对于类型中数据字段的封装,有以下3点好处:可能希望访问字段来执行一些“副作用”,缓存某些值或者推迟创建一些内部对象可能希望以线程安全......
  • 深度学习(初始化)
    深度学习训练的时候,一个好的初始化结果能使模型更容易收敛,Pytorch提供了一些初始化函数。importtorchimporttorch.nnasnnimportmatplotlib.pyplotaspltclassModel(nn.Module):def__init__(self):super(Model,self).__init__()self.a=nn.......
  • linux操作系统2-初始化
    操作系统初始化:1.配置CRT远程连接vi/etc/sysconfig/network-scripts/ifcfg-ens32BOOTPROTO=static静态获取IP地址ONBOOT=yes启用该网卡新增以下内容:IPADDR=192.168.1.100IP地址NETMASK=255.255.255.0子网掩码systemctlrestartnetwork2.SElinux操作系统安全机制关......
  • 准备工作(初始化)
    一、关闭防火墙:      查看:systemctlstatusfirewalld      关闭:systemctlstopfirewalld  //临时关闭      开机不自启:systemctldisablefirewalld--now //永久关闭      二、关闭SELINUX:   查看:getenforce   临时关......