springboot怎么完善上下文加载器
发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,本篇内容介绍了"springboot怎么完善上下文加载器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2024年12月01日springboot怎么完善上下文加载器
本篇内容介绍了"springboot怎么完善上下文加载器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1. prepareContext
源码:
``` private void prepareContext(ConfigurableApplicationContext context, ConfigurableEnvironment environment, SpringApplicationRunListeners listeners, ApplicationArguments applicationArguments, Banner printedBanner) { //注入环境属性 context.setEnvironment(environment); //上下文后置处理 this.postProcessApplicationContext(context); //完善初始化类的属性 this.applyInitializers(context); //发送监听事件 listeners.contextPrepared(context); //日志 if (this.logStartupInfo) { this.logStartupInfo(context.getParent() == null); this.logStartupProfileInfo(context); } //注册传入的配置参数为bean,这里将传入的参数封装成applicationArguments,内部类似命令行 ConfigurableListableBeanFactory beanFactory = context.getBeanFactory(); beanFactory.registerSingleton("springApplicationArguments", applicationArguments); //banner打印 if (printedBanner != null) { beanFactory.registerSingleton("springBootBanner", printedBanner); } //这里默认情况下bean定义不允许重复 if (beanFactory instanceof DefaultListableBeanFactory) { ((DefaultListableBeanFactory)beanFactory).setAllowBeanDefinitionOverriding(this.allowBeanDefinitionOverriding); } //默认不开启延迟加载 if (this.lazyInitialization) { context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor()); } //获取全部的资源 //这里获取了启动类的资源和 当前SpringApplication中的source资源。 //到目前来说实际上只有启动类资源 Set
老样子进行逐个分析。但看这个方法并不复杂,整体上对上下文和工厂类进行配置的完善。
1.1 postProcessApplicationContext 方法
源码:
protected void postProcessApplicationContext(ConfigurableApplicationContext context) { // 是否自定义bean名称生成类 if (this.beanNameGenerator != null) { context.getBeanFactory().registerSingleton("org.springframework.context.annotation.internalConfigurationBeanNameGenerator", this.beanNameGenerator); } //是否指定类加载器 if (this.resourceLoader != null) { if (context instanceof GenericApplicationContext) { ((GenericApplicationContext)context).setResourceLoader(this.resourceLoader); } if (context instanceof DefaultResourceLoader) { ((DefaultResourceLoader)context).setClassLoader(this.resourceLoader.getClassLoader()); } } //是否添加数据转换器 //在初始化环境对象的时候也有用到,这里可以直接通过 context.getEnvironment().getConversionService()获取到 if (this.addConversionService) { context.getBeanFactory().setConversionService(ApplicationConversionService.getSharedInstance()); } }
1.2 applyInitializers
完善与ApplicationContextInitializer接口相关的对象属性。这些对象在this.initializers中,早在SpringApplication初始化的时候就已经加载。通过已经初始化好的上下文对相关类进行完善。调用接口的initialize方法。
1.3 load
源码:
protected void load(ApplicationContext context, Object[] sources) { if (logger.isDebugEnabled()) { logger.debug("Loading source " + StringUtils.arrayToCommaDelimitedString(sources)); } //构建一个bean定义的加载器 BeanDefinitionLoader loader = createBeanDefinitionLoader(getBeanDefinitionRegistry(context), sources); if (this.beanNameGenerator != null) { loader.setBeanNameGenerator(this.beanNameGenerator); } if (this.resourceLoader != null) { loader.setResourceLoader(this.resourceLoader); } if (this.environment != null) { loader.setEnvironment(this.environment); } //将资源加载成bean loader.load(); } void load() { for (Object source : this.sources) { load(source); } } //按资源类型分别进行加载, private void load(Object source) { Assert.notNull(source, "Source must not be null"); if (source instanceof Class>) { load((Class>) source); return; } if (source instanceof Resource) { load((Resource) source); return; } if (source instanceof Package) { load((Package) source); return; } if (source instanceof CharSequence) { load((CharSequence) source); return; } throw new IllegalArgumentException("Invalid source type " + source.getClass()); }
主要加载了SpringApplication内初始化的资源,包括我们的启动类xxApplication将会被注册成bean。
"springboot怎么完善上下文加载器"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
资源
上下
上下文
对象
属性
方法
源码
内容
参数
实际
情况
接口
时候
更多
环境
知识
配置
复杂
实用
学有所成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
阿里云启动服务器管理器
服务器电脑主机怎么操作界面
扬州云服务器厂家直供
冰山理论软件开发
桓台染色软件开发定制
网络技术与面试
我们一般称为外文数据库的有
成都网络安全周地址
金融K8交易软件开发
软件开发沟通成本效率
服务器日常维护视频教程
梦讯网络技术
网络安全知识竞赛APP
派出所网络安全检查内部方案
数据库公司ibm
操作系统运用了数据库的技术吗
隐私保护网络安全华为
上位机行软件开发
软件开发部署需要准备工作
打开电脑代理服务器没反应
ddos 防护服务器
奇迹单机版自动连接服务器失败
七星岩服务器
数据库技术与数据仓库的区别
exce复制同一个数据库
服务器在IDC机房安全吗
计算机网络安全协议的作用
软件开发培训安排就业吗
交换机接服务器端口聚合
java数据库全文检索技术