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

Zipkin-1.19.0学习系列6:applyInitializers(context);

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

源码如下:

/**
	 * Apply any {@link ApplicationContextInitializer}s to the context before it is
	 * refreshed.
	 * @param context the configured ApplicationContext (not refreshed yet)
	 * @see ConfigurableApplicationContext#refresh()
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	protected void applyInitializers(ConfigurableApplicationContext context) {
		for (ApplicationContextInitializer initializer : getInitializers()) {
			Class<?> requiredType = GenericTypeResolver.resolveTypeArgument(
					initializer.getClass(), ApplicationContextInitializer.class);
			Assert.isInstanceOf(requiredType, context, "Unable to call initializer.");
			initializer.initialize(context);
		}
	}

debug结果如下:

main[1] print getInitializers()
 getInitializers() = "[
org.springframework.boot.context.config.DelegatingApplicationContextInitializer@c446b14, 
org.springframework.boot.context.ContextIdApplicationContextInitializer@3af356f, 
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer@4443ef6f, 
org.springframework.boot.context.web.ServerPortInfoApplicationContextInitializer@7e46d648, 
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer@51751e5f, 
org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer@2b0b4d53
]"

下面一个一个分析:

1)DelegatingApplicationContextInitializer

Step completed: "thread=main", org.springframework.boot.context.config.DelegatingApplicationContextInitializer.initialize(), line=54 bci=7
54    		List<Class<?>> initializerClasses = getInitializerClasses(environment);

main[1] next
> 
Step completed: "thread=main", org.springframework.boot.context.config.DelegatingApplicationContextInitializer.initialize(), line=55 bci=13
55    		if (!initializerClasses.isEmpty()) {

main[1] print initializerClasses
 initializerClasses = "[]"
main[1] next
> 
Step completed: "thread=main", org.springframework.boot.context.config.DelegatingApplicationContextInitializer.initialize(), line=58 bci=28
58    	}

什么都不做

2)ContextIdApplicationContextInitializer
 

@Override
	public void initialize(ConfigurableApplicationContext applicationContext) {
		applicationContext.setId(getApplicationId(applicationContext.getEnvironment()));
	}
119    		return name;

main[1] print name
 name = "zipkin-server:shared:9411"
main[1] step
> 
Step completed: "thread=main", org.springframework.boot.context.ContextIdApplicationContextInitializer.initialize(), line=105 bci=11
105    		applicationContext.setId(getApplicationId(applicationContext.getEnvironment()));

main[1] stepsdf
Unrecognized command: 'stepsdf'.  Try help...
main[1] print 		applicationContext
 		applicationContext = "org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@38f2e97e: startup date [Thu Jan 01 08:00:00 CST 1970]; root of context hierarchy"

3)ConfigurationWarningsApplicationContextInitializer

@Override
	public void initialize(ConfigurableApplicationContext context) {
		//这里
		context.addBeanFactoryPostProcessor(
				new ConfigurationWarningsPostProcessor(getChecks()));
	}

4)ServerPortInfoApplicationContextInitializer

@Override
	public void initialize(ConfigurableApplicationContext applicationContext) {
		applicationContext.addApplicationListener(
				new ApplicationListener<EmbeddedServletContainerInitializedEvent>() {

					@Override
					public void onApplicationEvent(
							EmbeddedServletContainerInitializedEvent event) {
						ServerPortInfoApplicationContextInitializer.this
								.onApplicationEvent(event);
					}

				});
	}

增加一个监听器

5)SharedMetadataReaderFactoryContextInitializer

6)AutoConfigurationReportLoggingInitializer

主要是设置自动配置的Bean
 

 

转载于:https://my.oschina.net/qiangzigege/blog/821174

相关文章:

  • 1078: 输入入门(3)
  • iptables 用法
  • SVN Cleanup failed to process the following paths错误的解决
  • LoadRunner监控Linux
  • HP Unix openssl、openssh 升级
  • php源码编译安装时的一些常见错误解决办法
  • 2006年教育部对社会主义倒奶和资本主义倒奶的的标准回答
  • 微信小程序使用三元运算符代替wx:if
  • 目标检測的图像特征提取之(一)HOG特征
  • YARN的capacity调度器主要配置分析
  • 我的博客
  • find 命令
  • IOCP 网络通讯模型源码解读
  • ASP.NET 如何固定表格表头(fixed header)
  • 使用sqlparse分析SQL语句,及自己写的SQL分析语句
  • ----------
  • 【译】JS基础算法脚本:字符串结尾
  • 【技术性】Search知识
  • AWS实战 - 利用IAM对S3做访问控制
  • isset在php5.6-和php7.0+的一些差异
  • Laravel 实践之路: 数据库迁移与数据填充
  • leetcode讲解--894. All Possible Full Binary Trees
  • python 装饰器(一)
  • Swift 中的尾递归和蹦床
  • swift基础之_对象 实例方法 对象方法。
  • Vue2.x学习三:事件处理生命周期钩子
  • Web设计流程优化:网页效果图设计新思路
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端学习笔记之观察者模式
  • 再谈express与koa的对比
  • (23)Linux的软硬连接
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (差分)胡桃爱原石
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (六)激光线扫描-三维重建
  • (转)Sublime Text3配置Lua运行环境
  • (转)Unity3DUnity3D在android下调试
  • (转)winform之ListView
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .aanva
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net 6.0 处理跨域的方式
  • .NET Core 2.1路线图
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 中viewstate的原理和使用
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net中生成excel后调整宽度
  • @Controller和@RestController的区别?
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ solr入门 ] - 利用solrJ进行检索
  • [30期] 我的学习方法
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)