
反射
反射通过类名,获取该类的模版对象,从而获取该类的方法,类型,注解,泛型,成员变量的信息。
类加载器
什么是类加载器
把.class文件加载到JVM的方法区中,变成一个Class对象
得到类加载器
Class#getClassLoader();
类加载器的分类
引导加载器:负责加载rt.jar(基础类库)。
扩展加载器:加载扩展包(jre/lib/ext/下的jar包)。
系统加载器:加载应用下的类,就是第三方类库和自己的类。准确的说是classpath下的类
系统类加载器的上层是扩展加载器的上层是引导加载器
类加载器的委托机制
当代码中出现了 new A();一行代码
系统加载器会通知扩展加载器加载A类
但是扩展加载器会通知引导加载器加载A类
引导加载器会在自己的rt.jar中查找A类。
如果找到了,加载Class对象,返回–> 扩展 –> 引导
如果没找到,返回一个null给扩展加载器,扩展加载器会在自己的类库中查找A类
同理,没有找到,返回null,给系统加载器,系统加载器才会从自己的类库中查找A类
同理,如果没找到抛出ClssNotFoundException
机制:防止系统关键类被自定类恶意覆盖。会出现加载器异常。
引导加载器加载的类中的类有引导加载器直接加载,就不用再次委派了。
getContextClassLoader() ; 获取当前线程的类加载器。
自定义类加载器
生成密钥,需要加密和解密。
AppClassLoader 系统类加载器
继承ClassLoader 覆盖方法,了解即可,深入时再研究
Tomcat类加载器
Tomcat提供了两种类加载器!
{CATALINA_HOME}lib , 服务器类加载器 , 他负责加载这个下面的类
{CONTEXT_HOME}WEB-INFlib ,
{CONTEXT_HOME}WEB-INFclasses, 应用类加载器,负责加载这两个目录下的类。
Tomcat的加载机制:先自己加载,在去委托上层。所以在TOMCAT的lib下放了jar包就不用在应用下放了。
优先级:应用下的class,第三方jar,tomcat的lib




近期评论