当前位置: 首页 > 面试题库 >

Java ClassLoader:两次加载相同的类

微生智刚
2023-03-14
问题内容

我有一个ClassLoader加载JavaCompiler从源文件编译的类。但是,当我更改源文件,保存并重新编译它时,ClassLoader仍然会加载该类的第一个版本。

   ClassLoader cl = Thread.currentThread().getContextClassLoader();
   Class<?> compiledClass = cl.loadClass(stringClass);

我想念什么?像newInstance之类的东西?


问题答案:

类加载器不能替换已经加载的类。loadClass将返回现有Class实例的引用。

您必须实例化一个新的类加载器,并使用它来加载新类。然后,如果要“替换”该类,则必须扔掉该类加载器并创建另一个新的类加载器。

针对您的评论:做类似的事情

ClassLoader cl = new UrlClassLoader(new URL[]{pathToClassAsUrl});
Class<?> compiledClass = cl.loadClass(stringClass);

该类加载器将使用“默认委托父类ClassLoader”,并且您必须注意,该类(由其完全限定的类名标识)尚未加载,并且不能由该父类加载器加载。因此,“
pathToClassAsUrl”不应放在类路径上!



 类似资料:
  • 我目前正在尝试将类加载到我的应用程序中,这样我就可以过滤掉那些不包含任何test/-方法的类。我希望以后在我的应用程序中运行这些测试。 到目前为止,一切都很好-除了我正在使用的(或者可能是任何)似乎没有实际重新加载位于我的应用程序类路径上的类。 更准确地说,我的应用程序的用户首先选择一些源文件。然后将它们复制到临时位置,并将许多正则表达式匹配/替换对应用于原始源文件的副本。接下来,拷贝被编译,然后

  • 问题内容: 我有使用JQuery..I米一个问题在我的代码发送字段名和序列号,其通过获取其数据的ctrller 和并且与序列表中没有given..And生成预览显示面板更新字段名与插入的字段..现在,我再次尝试更改字段名称。tat是现在,当我单击生成的显示面板字段时,相应的设置将打开,我将尝试立即更改字段名称 两者和都相同..在我发送的是字段名和序列号 在功能2中,我要发送相同的字段名和(但其他值

  • 在Spring IOC中,bean的两个定义(具有相同的名称和类)是否有效? 我有两个bean定义文件包含在web中。xml。参见下面的示例。 应用Context-beans1.xml applicationContext-beans2。xml 到目前为止,我还没有遇到任何问题。但是,这可能会影响到多线程和集群的现实环境吗? 注意:这两个XMLs都被加载,因为我可以使用在这两个XMLs中定义的其他

  • 我的spring ApplicationContext文件正在加载两次。这是使用标准的maven webapp结构,只有一个web.xml。只有一个上下文文件,并且只定义了一个servlet。没有Context-Loader-Listener。 我尝试了以下方法来解决此问题 标准命名约定('test-servlet.xml') 使用不同的上下文文件定义ContextLoaderListener-不

  • 在一个由Swagger-UI渲染的API规范中,同一个路径是否可能出现不止一次? 我应该创建单独的api规范并加载两个Swagger-UI实例吗?处理这件事的最好方法是什么? 例如,我有一个名为/oauth/token的endpoint,我想用一组oauth Authorization Code流的参数对其进行记录,用一组不同的参数对client_credentials流的同一个endpoint/

  • 我有两个不同的方法,在两个不同的类中。我希望他们都能阅读同一行输入,并检查不同的内容。一个查找“给我冲杯咖啡”之类的说明,另一个查找不同的关键字,如“请”和“谢谢”(这些影响程序对我的反应): 然后我在我的主字符串中调用它们,只是为了测试它们: 我的控制台显示如下: 我知道发生了什么,但我想不出其他办法。我也尝试过使用同一个扫描仪,不同的字符串,但仍然不起作用。我怎样才能使这两种方法都能读取我的第