super的工作原理是什么
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章主要讲解了"super的工作原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"super的工作原理是什么"吧!ClassPathXmlA
千家信息网最后更新 2025年11月10日super的工作原理是什么
这篇文章主要讲解了"super的工作原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"super的工作原理是什么"吧!
ClassPathXmlApplicationContext类图
深扒源码之前,一定要做好参考点,这里我们使用类图来做一个参考。 
super涉及的代码
super这个方法对应的代码并不多,如果我们要去跟的话,只需要仔细一点,了解他的层级结构,基本问题不大。这里把所有源码都拿出来了
public ClassPathXmlApplicationContext(ApplicationContext parent) { super(parent);}public AbstractXmlApplicationContext(@Nullable ApplicationContext parent) { super(parent);}public AbstractRefreshableConfigApplicationContext(@Nullable ApplicationContext parent) { super(parent);}public AbstractRefreshableApplicationContext(@Nullable ApplicationContext parent) { super(parent);}public AbstractApplicationContext(@Nullable ApplicationContext parent) { this(); this.setParent(parent);}public AbstractApplicationContext() { this.resourcePatternResolver = getResourcePatternResolver();}protected ResourcePatternResolver getResourcePatternResolver() { return new PathMatchingResourcePatternResolver(this);}public PathMatchingResourcePatternResolver(ResourceLoader resourceLoader) { Assert.notNull(resourceLoader, "ResourceLoader must not be null"); this.resourceLoader = resourceLoader;}public void setParent(@Nullable ApplicationContext parent) { this.parent = parent; if (parent != null) { Environment parentEnvironment = parent.getEnvironment(); if (parentEnvironment instanceof ConfigurableEnvironment) { getEnvironment().merge((ConfigurableEnvironment) parentEnvironment); } }}从我们的源码上来看,结合我们的类图,不难发现,其实super(parent)一直在调用父类的方法,直到AbstractApplicationContext,然后才有真正的操作代码。
AbstractApplicationContext中具体给super(parent)做了什么
先来看看this(),this()实际就是我们当前类里面的无参构造方法,最终其实也是给我们初始化了一个ClassPathXmlApplicationContext。这一点我们可以跟一下初始化的代码
public Resource getResource(String location) { return getResourceLoader().getResource(location);}public Resource getResource(String location) { Assert.notNull(location, "Location must not be null"); for (ProtocolResolver protocolResolver : getProtocolResolvers()) { Resource resource = protocolResolver.resolve(location, this); if (resource != null) { return resource; } } if (location.startsWith("/")) { return getResourceByPath(location); } else if (location.startsWith(CLASSPATH_URL_PREFIX)) { return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader()); } else { try { // Try to parse the location as a URL... URL url = new URL(location); return (ResourceUtils.isFileURL(url) ? new FileUrlResource(url) : new UrlResource(url)); } catch (MalformedURLException ex) { // No URL -> resolve as resource path. return getResourceByPath(location); } }}最终是按照我们的路径的开头判断返回哪种resource
setParent(parent)到底做了些啥
setParent(parent);对应的代码并不多,也是比较简单明了的
public void setParent(@Nullable ApplicationContext parent) { this.parent = parent; if (parent != null) { Environment parentEnvironment = parent.getEnvironment(); if (parentEnvironment instanceof ConfigurableEnvironment) { getEnvironment().merge((ConfigurableEnvironment) parentEnvironment); } }}这几部代码就做了一件事情:保存父容器,并将父容器的环境与当前容器环境合并。
感谢各位的阅读,以上就是"super的工作原理是什么"的内容了,经过本文的学习后,相信大家对super的工作原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
代码
原理
工作
容器
方法
源码
学习
内容
就是
环境
问题
参考
不大
事情
实际
层级
开头
思路
情况
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器出现的问题和解决方案
世界网络安全专家
网络安全行业经常加班吗
网络安全监控实质
视频软件开发教学
江阴艾康软件开发公司
湖州巨量引擎网络技术有限公司
服务器入侵工具包
iptv软件开发
软件开发项目策划
网络安全运维岗位职责
我的世界网络安全知识宣传
宾旅馆网络安全承诺书
微软云 文件服务器
苹果电脑可以登远程服务器吗
mysql 不能插入数据库
数据库的使用类型
重庆联通dns服务器云空间
江苏戴尔服务器续保安装
实用网络技术考点
服务器做集群
重庆有哪些互联网科技公司
日本未成年人网络安全措施
广东网络安全和信息化会议
软件开发项目实现策划
四川前端软件开发大概多少钱
网络技术开发经营范围介绍
云南网络安全服务
网络安全安全周河南省
联想服务器修改引导方式