类加载器
类加载器 把类加载到内存中。
java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器。每个类负责加载特定位置的类
多个加载器 每个加载负责加载不同的类
BootStrap (引导加载器) ,ExtClassLoader(扩展类加载器),AppClassLoader(应用程序加载器);
类加载器也是java类,根加载器是(BootStrap)这个根加载器正式BootStrap.(不是java类本身嵌套在java内核中的)c++语言写的二进制代码。
Java虚拟机所有类加载器采用具有父子关系的树形结构,
BootStrap 加载JRE/lib/rt.jar中的类
ExtClassLoader 加载JRE/lib/ext/*.jar
AppClassLoader CLASSPATH 指定的所有jar或目录
类加载器的委托机制
类加载器也可以自己创建
Java虚拟机要加载一个类时 ,到底派哪个类加载器去加载?
首先当前线程的类加载器去加载第一个类
如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B
还可以直接调用ClassLoader.loadClass()方法来指定某个加载器去加载某个类。
每个类加载器加载类时又先 委托给其上级类加载器
当所有祖宗加载器没有加载到类,回到发起类加载器,还加载不了就抛出异常。
编写自己的类加载器
代理的概念与作用
程序中的代理
要为已存在的多个具有相同接口的目标类的各种方法增加一些动力系统功能。
编写的类要和目标类具有相同的接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码。
如果采用工厂模式和配置文件的方式进行管理则不需要修改客户端程序,在配置文件中配置是使用目标类,还是代理类,这样以后很容易切换譬如想要日志功能时就配置代理类,否则配置目标类,这样增加系统功能很容易,以后运行一段时间后,又想去掉系统功能也很容易。
|