super的工作原理是什么
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章主要讲解了"super的工作原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"super的工作原理是什么"吧!ClassPathXmlA
千家信息网最后更新 2025年02月22日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安全错误
数据库的锁怎样保障安全
铜陵餐饮软件开发费用
数据库标准化
电脑怎么看云服务器的位置
服务器工程师面试题
服务器常见问题和处理方法
色弱色弱可以做软件开发吗
传奇页游服务器
淘宝饥荒云服务器
服务器电脑机箱双电源供电教程
php表单查询数据库
数据库 表 编辑器
网络安全专家组
手机升级后显示无法连接服务器
和平区网络安全和信息化工作会议
神奇宝贝服务器怎么改性格
村居网络安全知识宣讲简报
c语言访问web服务器
佛山网络安全学院工资待遇高
思科服务器升级
中国联通网络技术大会青岛
数据库在云下
app抢单软件开发
管家婆数据库设计
湖南省中小学校园网络安全
刀片服务器性能影响因素
数据库求相邻数值的差
虔东软件开发工作室
关于湘西网络安全
软件开发阶段的PI指什么
服务器删除网站