最近在公司做一个行李监控系统,主要使用了Spring。之前看过Spring方面的书,所以项目还算得心应手。但本人打算深入的研究Spring的原理,于是有了此文。
Spring能帮助开发者自动管理bean的创建和注入,这是多么神奇的事情。这也得益于Java的反射机制。在反射机制中,我研究了下类装载器的相关资料,现总结如下:
ClassLoader是一个抽象类,它能在运行时查找并装入Class字节码文件。JVM在运行时会产生三个类装载器:根装载器、ExtClassLoader、AppClassLoader,这个类装载器分别用来加载不同的字节码文件。根装载器用来加载JRE核心类库Jar如rt.jar。ExtClassLoader用来装载JRE扩展目录ext中的jar,如图所示。
AppClassLoader用来装载应用程序编译后得到的二进制文件。并且这三个ClassLoader存在父子关系,通过以下测试代码可得到验证:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
System.out.println("当前使用的类装载器: " + classLoader);
System.out.println("当前类装载器的父装载器 :" + classLoader.getParent());
System.out.println("当前类装载器的父装载器的父装载器 : " + classLoader.getParent().getParent());
以上代码的输出信息如下:
当前使用的类装载器: sun.misc.Launcher$AppClassLoader@454e2c9c
当前类装载器的父装载器 :sun.misc.Launcher$ExtClassLoader@f52d950
当前类装载器的父装载器的父装载器 : null(根装载器在Java中访问不到,故返回null)
此篇先到这里,,,周一还要早起。