自定义类加载器
自定义 加载
2023-09-11 14:16:04 时间
public static void main(String[] args) throws Exception{
ClassLoaderTest01 loader1 = new ClassLoaderTest01("loader1");
loader1.setPath("D:\\log4j\\sys\\");
ClassLoaderTest01 loader2 = new ClassLoaderTest01("loader2",loader1);
loader2.setPath("D:\\log4j\\common\\");
ClassLoaderTest01 loader3 = new ClassLoaderTest01("loader3",null);
loader3.setPath("D:\\log4j\\common\\");
try{
test(loader2,"com.zkn.newlearn.classloader.Parent");
}catch(Exception e){
loader2 = new ClassLoaderTest01("loader02");
loader2.setPath("D:\\log4j\\common\\");
test(loader2,"com.zkn.newlearn.classloader.Parent");
test(loader3,"com.zkn.newlearn.classloader.Parent");
private static void test(ClassLoader loader,String name)
throws ClassNotFoundException, InstantiationException,
IllegalAccessException {
Class clazz = null;
try{
clazz = loader.loadClass(name);
}catch(Exception e){
e.printStackTrace();
clazz.newInstance();
双亲委派模型与类加载器 我们都知道类都是通过类加载器被加载进虚拟机中的,那这个类加载器有哪些呢?我们平时写的代码又是通过什么类加载器被加载进虚拟机中的呢?类加载器的工作模式又是什么呢?带着疑问一起去学习下双亲委派模型与类加载器。
自定义类加载器 1. 在《类加载器》中讲的,默认类加载器只能加载固定路径下的class,如果有特定路径下的class,需要自定义 2. 安全性:系统自身需要一些jar,class,如果业务类代码中也有相同的class,破坏系统,类似双亲委托安全性 可以看看tomcat自定义类加载器的原因,别的就大同小异了 1. a)、要保证部署在tomcat上的每个应用依赖的类库相互独立,不受影响。 2. b)、由于tomcat是采用java语言编写的,它自身也有类库依赖,为了安全考虑,tomcat使用的类库要与部署的应用的类库相互独立。 3. c)、有些类库tomcat与部署的应用可以共享,比如说servlet-api,
package com.zkn.newlearn.classloader; * @author zkn public class Parent { public static int i = 1; public Parent(){ new Dog(); System.out.println("Parent类加载器为:"+Parent.class.getClassLoader());
package com.zkn.newlearn.classloader; * @author pc public class Dog { public Dog(){ System.out.println("Dog 类 : 类加载器为--"+ Dog.class.getClassLoader());
ClassLoaderTest01在sys下面:
1、如果Parent类在common下面,由子类加载,即loader2来加载。
img src="http://img.blog.csdn.net/20160122230640800?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /
2、如果Parent类在sys下面
由父类加载器加载,即loader1来加载。
img src="http://img.blog.csdn.net/20160122230703769?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /
如果Parent在系统目录下
img src="http://img.blog.csdn.net/20160122230726426?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /
对于loader3,无论Parent类在哪目录下,Parent类始终由loader3来加载。
双亲委派模型与类加载器 我们都知道类都是通过类加载器被加载进虚拟机中的,那这个类加载器有哪些呢?我们平时写的代码又是通过什么类加载器被加载进虚拟机中的呢?类加载器的工作模式又是什么呢?带着疑问一起去学习下双亲委派模型与类加载器。
自定义类加载器 1. 在《类加载器》中讲的,默认类加载器只能加载固定路径下的class,如果有特定路径下的class,需要自定义 2. 安全性:系统自身需要一些jar,class,如果业务类代码中也有相同的class,破坏系统,类似双亲委托安全性 可以看看tomcat自定义类加载器的原因,别的就大同小异了 1. a)、要保证部署在tomcat上的每个应用依赖的类库相互独立,不受影响。 2. b)、由于tomcat是采用java语言编写的,它自身也有类库依赖,为了安全考虑,tomcat使用的类库要与部署的应用的类库相互独立。 3. c)、有些类库tomcat与部署的应用可以共享,比如说servlet-api,
相关文章
- CSS如何实现自定义鼠标应用到整个网页
- 自定义控件 --- 加载旋转图标
- CMS自定义表单无法切换“是否需要登录”开关
- fastadmin自定义js文件加载方法
- Yii 自定义Widget Portlet
- 自定义 View 绘制文字 HenCoder-3 [MD]
- 自定义控件 --- 加载旋转图标
- fastadmin自定义js文件加载方法
- 微信小程序----自定义加载图标
- set容器之自定义数据类型排序
- 如何让 ABAP 服务器能够响应通过浏览器发起的自定义 HTTP 请求的试读版
- ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测
- 【项目实战】接入极光推送SDK,实现从Java服务端后台推送自定义消息到Android车机端
- Android 自定义seekbar实现拖动验证功能
- Android 自定义View 实现自动吸附功能
- Android 10.0 添加自定义设备BUILD_DISPLAY_ID号
- (八十七)c#Winform自定义控件-朝上的瓶子
- (四十九)c#Winform自定义控件-下拉框(表格)-HZHControls
- Vue自定义指令实现图片懒加载