推荐观看
Method method = service.getClass().getMethod();这里的service.getClass().是使用了哪种类加载机制呢
service.getClass()
是Java中获取一个对象运行时类的常用方法,返回的是该对象的Class
实例。这里并没有直接涉及到类加载的过程,因为当你调用getClass()
时,该对象的类已经被加载进JVM。
但关于类加载机制的问题,Java使用了一种称为委托模型(Delegation Model)的类加载机制。这个模型包括以下几个主要的类加载器:
-
Bootstrap ClassLoader:负责加载JVM基本核心的类库,如
java.lang.*
,这些类库通常在$JAVA_HOME/jre/lib
目录下。 -
Extension ClassLoader:负责加载
$JAVA_HOME/jre/lib/ext
目录或者由系统变量java.ext.dirs
指定路径中的类库。 -
Application ClassLoader:负责加载系统类路径(ClassPath)中指定的类库。这是应用默认的类加载器,也是我们通常接触到的类加载器。
当一个类需要被加载时,按照上述顺序,首先检查较高层次的类加载器是否已经加载了该类,如果已加载,则不再继续,如果没有加载,则尝试加载。这种机制确保了类的唯一性以及安全性。
在service.getClass().getMethod(...)
的上下文中,service
对象的类肯定已经被某个类加载器加载到了JVM中。如果你想知道是哪个类加载器加载的这个类,你可以使用service.getClass().getClassLoader()
来获取。