- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近我开始学习类加载器在 Java 中到底是如何工作的。以下是我观察到的三点:
第一点:每个类加载器都有一个父类加载器。当类加载器被要求加载类或资源时,它会在尝试加载项目本身之前咨询其父类加载器。父级又咨询其父级,依此类推。所以只有在所有祖先类加载器都找不到该项之后,当前类加载器才会介入。
Point-2:由两个加载器加载的同一个类被视为两个不同的类实体。我们甚至不能将一个类(loader 1)对象转换为另一个类(由loader2加载)。它将抛出 ClassCastException。
第三点:子类加载器可以检查父类加载器的缓存,但父类加载器看不到已加载的类 由 child 。
基于以上几点我有两个问题:
情况:我在同一个应用程序中创建了一个 URLClassloader 对象 url1 和另一个 URLClassloader 对象 url2。正如我们所知,默认情况下两个类加载器将具有相同的父类加载器。假设这里的父类加载器是SystemClassLoader。
问题 1: url1 类加载器已从位置 x/abc.jar 加载类 A.class。 url2 再次想要从同一个加载相同的类 地点。 url2 会重新加载还是会使用 url1 加载的相同内容?我尝试检查,只有一次静态 block 被执行,所以相信类只被加载一次。据我了解,这不满足Point-1和Point-3。
问题2:url2类加载器是否可以检查url1类加载器的缓存。与第 3 点相关。
最佳答案
类加载器是完全独立的,因此您可以获得两个不同的类。
由于您没有发布 MCVE (最小、完整和可验证的示例),这是一个使用任意选择的 .jar 文件的示例。
public static void main(String[] args) throws Exception {
String jarFile = "/path/to/commons-lang3-3.8.1.jar";
URLClassLoader url1 = new URLClassLoader(new URL[] { new File(jarFile).toURI().toURL() });
URLClassLoader url2 = new URLClassLoader(new URL[] { new File(jarFile).toURI().toURL() });
Class<?> fractionClass1 = url1.loadClass("org.apache.commons.lang3.math.Fraction");
Class<?> fractionClass2 = url2.loadClass("org.apache.commons.lang3.math.Fraction");
Object oneHalf1 = fractionClass1.getField("ONE_HALF").get(null);
Object oneHalf2 = fractionClass2.getField("ONE_HALF").get(null);
System.out.println("url1 = " + url1);
System.out.println("url2 = " + url2);
System.out.println(" Same? " + (url1 == url2));
System.out.println("fractionClass1 = " + fractionClass1);
System.out.println("fractionClass2 = " + fractionClass2);
System.out.println(" Same? " + (fractionClass1 == fractionClass2));
System.out.println("oneHalf1 = " + oneHalf1);
System.out.println("oneHalf2 = " + oneHalf2);
System.out.println(" Same? " + (oneHalf1 == oneHalf2));
}
输出
url1 = java.net.URLClassLoader@1e81f4dc
url2 = java.net.URLClassLoader@4d591d15
Same? false
fractionClass1 = class org.apache.commons.lang3.math.Fraction
fractionClass2 = class org.apache.commons.lang3.math.Fraction
Same? false
oneHalf1 = 1/2
oneHalf2 = 1/2
Same? false
关于java - java Class-loader loader Hierarchy 中同一级别的两个类加载器(假设都是 URLClassLoader)如何加载一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070608/
我正在使用 webpack 开始我的学习之路,但遇到了一个问题,我认为这是由 extract-loader 引起的。 .当webpack抓取我的HTML文件时,似乎无法正常编译,在使用import.m
我正在使用 tomcat 8,在 tomcat-home/config/catalina.properties ,有关于的部分 common.loader, server.loader and sha
在使用 import 语句时,我对区分 sass-loader 和 css-loader 有点困惑。据我所知,css loader resolve import statment(@import) 和
我的 webpack 加载器数组中有这个加载器: { test: /\.scss$/, exclude: /node_modules/, loaders: ExtractTextPlugin('sty
我对 url-loader 、 file-loader 和 image-loader 感到很困惑。谁能解释一下 url-loader 、 file-loader 和 image-loader 的区别是
我有 page.css @imports index.css。 page.css 和 index.css 都有 display: flex Webpack.config.js 包含: module:
我在 webpack 中使用生产模式构建的多入口点最终 bundle 中导出的多入口编译 js 文件始终包含加载器内容。如何消除它们以及为什么包含它们? 重现 git clone https://gi
模板加载器找到模板但未加载模板 TemplateDoesNotExist at /cardpayment/ cardpayment.html Request Method: GET Reque
当我尝试运行 gradle tR (tomcatRun) 时出现此错误 A child container failed during start java.util.concurrent.Execu
Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/projectna
我计划将 Webpack 用于一个项目,并且我正在使用 Html-loader + file-loader 设置我的工作流程,以获取带有图像动态 src 的生产 html 文件,正如 Colt Ste
我有一个巨大的 csv 文件,其中包含数百万条记录,我想使用 python 脚本将它加载到 Netezza 数据库中。我尝试了简单的插入查询,但速度非常非常慢。可以指出一些示例 python 脚本或一
我想将 ts-loader 与 babel-polyfill 一起使用,但不使用 babel-loader。但是当我尝试构建该项目时,我收到了此错误。谁能告诉我我缺少什么。 ERROR in ./sr
下面是我的 webpack.config.js 和 package.json module.exports = { entry: "./entry.js", output: { fi
我在两台不同的 PC 上遇到了一个问题。对于我的项目,我为开发安装了以下依赖项:(webpack webpack-cli @babel/core @babel/preset-env @babel/pr
模板文件保存在app目录下,但渲染时引发TemplateDoesNotExist异常: 模板加载器事后分析如下: Django 尝试按以下顺序加载这些模板: Using loader django.t
PHPUnit 手册说: If you point the PHPUnit command-line test runner to a directory it will look for *Test
我正在开发一个需要 html 的角度应用程序要提取为纯 HTML 文件的文件,同时应检查任何 要求这些图像(作为 Assets )。另外,图片是基于根路径的(所以 /images/something.
我们在 sql 加载器中遇到了问题。我们正在尝试将一个大约 46 亿行(近 340 GB)的数据文件加载到 2 个 oracle 表中,基于一些使用 Sql Loader 的条件。但是在加载了 42
我将 CSS 模块与 webpack css-loader 一起使用,然后将它们与 mini-css-extract-plugin 捆绑在一起。 这是我的配置的样子: { test: /\.c
我是一名优秀的程序员,十分优秀!