super的工作原理是什么
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"super的工作原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"super的工作原理是什么"吧!ClassPathXmlA
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
山东特亿宝互联网科技有限公司
科技和互联网公司
中国互联网科技股
互联网科技有限公司图片
互联网下的科技发展
互联网科技小贷
互联网金融科技平台
广州凡科互联网科技
多迪互联网科技有限公司
深圳前海聚择互联网科技有限公司
互联网科技公司实习生
国大互联网教育科技有限公司工作
互联网科技实习生岗位
工业互联网科技创业
互联网科技新闻
保山互联网科技靠谱吗
众联互联网络科技
互联网科技大佬云集
互联网领先科技成果宣传视频
南京欣网互联网络科技
保险科技 互联网保险
互联网加科技
云信互联网科技有限公司
重庆互联网络科技
顺网科技2021年互联网排名
天速互联网络科技有限公司
南平创想时代互联网科技有限公司
畅思互联网科技
济南小医互联网科技有限公司招聘