Spring5 IOC源码解读系列1—prepareRefresh方法
一 概述
prepareRefresh是抽象类AbstractApplicationContext中的方法,主要干了刷新前的准备工作,比如设置上下文的属性,配置文件的校验等。 如果开启debug模式,执行完prepareRefresh后会打印日志 DEBUG org.springframework.context.support.ClassPathXmlApplicationContext -Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2d901eb0
二 源码
protected void prepareRefresh() { // Switch to active. //记录上下文的启动时间 this.startupDate = System.currentTimeMillis(); //将上下文状态设置为活跃状态 this.closed.set(false); this.active.set(true); //日志 if (logger.isDebugEnabled()) { if (logger.isTraceEnabled()) { logger.trace("Refreshing " + this); } else { logger.debug("Refreshing " + getDisplayName()); } } // Initialize any placeholder property sources in the context environment. //在上下文环境中初始化任何占位符属性源 //实际上是一个空的方法 initPropertySources(); // Validate that all properties marked as required are resolvable: // see ConfigurablePropertyResolver#setRequiredProperties //校验配置文件 //如果存在key为null会发抛出异常 getEnvironment().validateRequiredProperties(); // Store pre-refresh ApplicationListeners... //存储预刷新的应用程序监听器 if (this.earlyApplicationListeners == null) { this.earlyApplicationListeners = new LinkedHashSet<>(this.applicationListeners); } else { // Reset local application listeners to pre-refresh state. this.applicationListeners.clear(); this.applicationListeners.addAll(this.earlyApplicationListeners); } // Allow for the collection of early ApplicationEvents, // to be published once the multicaster is available... //初始化earlyApplicationEvents ,用于收集早期的应用事件 this.earlyApplicationEvents = new LinkedHashSet<>(); }
三 参考文献
1)JDK7在线文档 https://tool.oschina.net/apidocs/apidoc?api=jdk_7u4 2) JDK8在线文档 https://docs.oracle.com/javase/8/docs/api/ 3) Bruce Eckel. Java编程思想,第4版,2007,机械工业出版社 4)方腾飞,魏鹏,程晓明. Java并发编程的艺术,第1版,2015年,机械工业出版社 5)克雷格.沃斯. Spring实战,第5版,2020年,人民邮电出版社
上一篇:
IDEA上Java项目控制台中文乱码