super的工作原理是什么
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要讲解了"super的工作原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"super的工作原理是什么"吧!ClassPathXmlA
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
计算机网络技术三班的班级愿景图
云服务器能上网吗
db2数据库复制 字符集
网络安全事件及其处理
服务器的安全配置
软件开发税收优惠政策是什么
利用网络技术提升党建
大华存储服务器怎样安装系统
控制网络技术在工作中有用嘛
乐亭媒体网络技术售后服务
护苗 网络安全简讯
盛世芳华服务器什么时候开一个
青少年网络安全挑战赛
可神奇宝贝服务器
网络安全的重要
收集mysql服务器的监控信息
网络安全手抄报易画内容
数据库课程论文范文
抖音红盟网络安全工作室
上海瑜鹤网络技术有限公司
国网信通部网络安全处刘莹
非关系型数据库怎么存储
java服务器运维脚本
神佑释放选择服务器进不去
可以自学软件开发的平台
2700x 数据库性能
网络安全法法人执法
服务器管理口联接
国家网络安全保护中心
网站数据存入数据库怎么加密