草庐IT

classloader

全部标签

Android类加载ClassLoader

一、ClassLoader类图关系ClassLoader、BootClassLoader、BaseDexClassLoader等之间关系,如下如:1656411840319.jpg二、双亲委托机制1、定义如果某个类加载器在加载类时,先不会自己去尝试加载这个类,而是首将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务或者没有父类加载器时,才会交给自己尝试加载。如:可以看到创建ClassLoader需要接收一个ClassLoaderparent参数。这个parent的目的就在于实现类加载的双亲委托protectedClassload

java - 在运行时替换某些方法的内容

我想在运行时替换一些方法的内容。我知道我可以为此使用javassist,但它不起作用,因为我想增强的类已经由系统classLoader加载。如何在运行时替换方法的内容?我应该尝试卸载类(class)吗?我怎样才能做到这一点?我看到这是可能的,但我不知道该怎么做。如果可能,我想避免为此使用外部库,我想自己编写代码。更多信息:-我想增强的类包含在一个框架中(在一个jar文件中)-我的代码实际上是这个框架的一个插件-我的插件运行的框架有它自己的classLoader,但是这个classLoader不加载它自己的类(它把它们委托(delegate)给系统类加载器)-我使用的框架是Play。感谢

java - 在运行时替换某些方法的内容

我想在运行时替换一些方法的内容。我知道我可以为此使用javassist,但它不起作用,因为我想增强的类已经由系统classLoader加载。如何在运行时替换方法的内容?我应该尝试卸载类(class)吗?我怎样才能做到这一点?我看到这是可能的,但我不知道该怎么做。如果可能,我想避免为此使用外部库,我想自己编写代码。更多信息:-我想增强的类包含在一个框架中(在一个jar文件中)-我的代码实际上是这个框架的一个插件-我的插件运行的框架有它自己的classLoader,但是这个classLoader不加载它自己的类(它把它们委托(delegate)给系统类加载器)-我使用的框架是Play。感谢

java - JVM启动后Java类路径是最终的吗?

我最近阅读了很多关于Java类加载过程的内容。我经常遇到声称在运行时无法将类添加到类路径并在没有类加载器骇客(URLClassLoaders等)的情况下加载它们的文本据我所知,类是动态加载的。这意味着它们的字节码表示仅在需要时才加载并转换为java.lang.Class对象。那么在JVM启动并加载这些类之后,是否可以将JAR或*.class文件添加到类路径中,前提是它们尚未加载?(要明确:在这种情况下,类路径只是文件系统上的文件夹。“添加JAR或*.class文件”只是意味着将它们放入此文件夹中。)如果不是,这是否意味着在JVM启动时搜索类路径,并且找到的类的所有完全限定名称都缓存在内

java - JVM启动后Java类路径是最终的吗?

我最近阅读了很多关于Java类加载过程的内容。我经常遇到声称在运行时无法将类添加到类路径并在没有类加载器骇客(URLClassLoaders等)的情况下加载它们的文本据我所知,类是动态加载的。这意味着它们的字节码表示仅在需要时才加载并转换为java.lang.Class对象。那么在JVM启动并加载这些类之后,是否可以将JAR或*.class文件添加到类路径中,前提是它们尚未加载?(要明确:在这种情况下,类路径只是文件系统上的文件夹。“添加JAR或*.class文件”只是意味着将它们放入此文件夹中。)如果不是,这是否意味着在JVM启动时搜索类路径,并且找到的类的所有完全限定名称都缓存在内

Java - 加载带注释的类

我知道在Java中加载插件类的工具非常多,但今天我想到了一个想法。如果我在包“org.home.junk”中有一堆带注释和未注释的类(使用注释“@AnnotatedClass”进行注释)并且这些类具有带有注释“@AnnotatedMethod”的注释方法。第一个问题:我能否在运行时获取该特定包中所有类的数组/集合,以便我可以检查哪些类被注释并创建它们的实例。(但我知道如何检查Some.class是否有本指南提供的注释:http://isagoksu.com/2009/development/java/creating-custom-annotations-and-making-use-

Java - 加载带注释的类

我知道在Java中加载插件类的工具非常多,但今天我想到了一个想法。如果我在包“org.home.junk”中有一堆带注释和未注释的类(使用注释“@AnnotatedClass”进行注释)并且这些类具有带有注释“@AnnotatedMethod”的注释方法。第一个问题:我能否在运行时获取该特定包中所有类的数组/集合,以便我可以检查哪些类被注释并创建它们的实例。(但我知道如何检查Some.class是否有本指南提供的注释:http://isagoksu.com/2009/development/java/creating-custom-annotations-and-making-use-

java - 使用 ClassLoader 和 Class.forName 加载类的区别

以下是2个代码片段第一个使用ClassLoader类加载指定的类ClassLoadercls=ClassLoader.getSystemClassLoader();类someClass=cls.loadClass("TargetClass");第二个使用Class.forName()加载指定的类Classcls=Class.forName("TargetClass");上述方法有什么区别。哪个用于哪个目的? 最佳答案 其他答案非常完整,因为它们探索了Class.forName(...)的其他重载。,并讨论使用不同ClassLoade

java - 使用 ClassLoader 和 Class.forName 加载类的区别

以下是2个代码片段第一个使用ClassLoader类加载指定的类ClassLoadercls=ClassLoader.getSystemClassLoader();类someClass=cls.loadClass("TargetClass");第二个使用Class.forName()加载指定的类Classcls=Class.forName("TargetClass");上述方法有什么区别。哪个用于哪个目的? 最佳答案 其他答案非常完整,因为它们探索了Class.forName(...)的其他重载。,并讨论使用不同ClassLoade

java - 在运行时更新 JAR

假设jar在JVM中运行,是否可以卸载当前运行的Jar并将其从系统中删除。下载新版本并将其重命名为与上一个Jar相同的名称,然后初始化新Jar,从而在JVM中创建Jar的无缝更新。甚至可以指示JVM执行此操作吗?是否可以在运行时更新Jar? 最佳答案 DownloadanewversionandrenameitwiththesamenameofthelastJarandtheninitialisethenewJar,creatingaseamlessupdateoftheJarwithintheJVM...Isitevenpossi