springboot怎么完善上下文加载器
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇内容介绍了"springboot怎么完善上下文加载器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
互联网是服务业不是高科技
访问本地服务器
macOS软件开发进阶路线
网络安全情况审计的通报
软件开发与运维的融合的厂家
网络版杀毒系统管理服务器
贸易战利好网络安全云计算
车主邦加油软件开发
软件开发及服务行业
软件开发的功能结构图
数据库在线考试
如何在手机服务器中加光影
维普文献数据库的优缺点
教学软件开发规划
怎么查数据库的空间大小
java 队列 数据库
福建纵腾网络技术
服务器没有启动文件
上海软件开发的公司哪家好
网络技术回送地址在哪
国开数据库应用技术测验
盗贼之海为什么进不去服务器
天基互联网杰赛科技
服务器上安装iis
郑州乐橙网络技术有限公司
高中网络技术知识提纲
蚂蚁会员网络技术服务
兰小机 空间数据库
安全牛网络安全排行榜
我的世界启源神奇宝贝服务器