老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

怎么破壞Java雙親委派模型

本篇內容主要講解“怎么破壞Java雙親委派模型”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么破壞Java雙親委派模型”吧!

創新互聯長期為上千客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為石柱土家族企業提供專業的成都網站制作、成都網站建設、外貿營銷網站建設石柱土家族網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發。

自定義示例一

重寫findClass不會破壞雙親委派模型,同時也驗證了雙親委派模型的正確性。

package com.example.classloader;

import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestClassLoader {

	@Test
	public void test() {
		Class class0 = TestClassLoader.class;
		try {
			// false
			System.out.println(class0.getClassLoader() instanceof MyClassLoader);
			Class class1 = class0.getClassLoader().loadClass("com.example.classloader.TestClassLoader");
			ClassLoader classLoader = new MyClassLoader();
			Class class2 = classLoader.loadClass("com.example.classloader.TestClassLoader");
			// true
			System.out.println(class0.equals(class1));
			// true
			System.out.println(class1.equals(class2));
			// sun.misc.Launcher$AppClassLoader@18b4aac2
			System.out.println(class0.getClassLoader());
			// sun.misc.Launcher$AppClassLoader@18b4aac2
			System.out.println(class1.getClassLoader());
			// sun.misc.Launcher$AppClassLoader@18b4aac2
			System.out.println(class2.getClassLoader());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 *  自定義一個類加載器從指定磁盤目錄加載類
	 *  重寫findClass不破壞雙親委派模型
	 */
	public class MyClassLoader extends ClassLoader {
		@Override
		protected Class findClass(String name) {
			String myPath = "/Users/lsx/code/demo/target/classes/" + name.replace(".", "/") + ".class";
			byte[] classBytes = null;
			FileInputStream in = null;

			try {
				File file = new File(myPath);
				in = new FileInputStream(file);
				classBytes = new byte[(int) file.length()];
				in.read(classBytes);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			Class clazz = defineClass(name, classBytes, 0, classBytes.length);
			return clazz;
		}
	}
}

自定義示例二

重寫loadClass破壞雙親委派模型,父類的加載(Object)也會交由我們自自定義的類加載器加載。而很明顯在我們自定義的加載目錄下是不會有Object.class這個文件的,所以會拋出異常。

/**
	 *  重寫loadClass破壞雙親委派模型
	 * java.io.FileNotFoundException: /Users/lsx/code/demo/target/classes/java/lang/Object.class (No such file or directory)
	 */
	public class MyClassLoader extends ClassLoader {
		@Override
		public Class loadClass(String name) {
			String myPath = "/Users/lsx/code/demo/target/classes/" + name.replace(".", "/") + ".class";
			System.out.println(myPath);
			byte[] classBytes = null;
			FileInputStream in = null;

			try {
				File file = new File(myPath);
				in = new FileInputStream(file);
				classBytes = new byte[(int) file.length()];
				in.read(classBytes);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			System.out.println();
			Class clazz = defineClass(name, classBytes, 0, classBytes.length);
			return clazz;
		}
	}

總結:如果不想打破雙親委派模型就重寫ClassLoader類中的findClass()方法即可,無法被父類加載器加載的類最終會通過這個方法被加載。而如果想打破雙親委派模型則需要重寫loadClass()方法。

JDBC對雙親委派模型的破壞(加載SPI接口實現類)

原生的JDBC中Driver驅動本身只是一個接口,并沒有具體的實現,具體的實現是由不同數據庫類型去實現的。例如,MySQL的mysql-connector-.jar中的Driver類具體實現的。 原生的JDBC中的類是放在rt.jar包的,是由啟動類加載器進行類加載的,在JDBC中的Driver類中需要動態去加載不同數據庫類型的Driver類,而mysql-connector-.jar中的Driver類是用戶自己寫的代碼,那啟動類加載器肯定是不能進行加載的,既然是自己編寫的代碼,那就需要由應用程序啟動類去進行類加載。于是乎,這個時候就引入線程上下文件類加載器(Thread Context ClassLoader)。有了這個東西之后,程序就可以把原本需要由啟動類加載器進行加載的類,由應用程序類加載器去進行加載了。通過線程上下文加載器去加載所需要的SPI代碼,也就是父類加載器請求子類加載器去完成類加載的動作,實際是通過打破了雙親委派模型的層次結構來逆向使用類加載器,違背了雙親委派模型的一般性原則。具體參考以JDBC為例談雙親委派模型的破壞

OSGI對雙親委派模型的破壞

雙親委派模型的第三次“被破壞”是由于用戶對程序的動態性的追求導致的。為了實現熱插拔、熱部署、模塊化,意思是添加一個功能或減去一個功能不用重啟,只需要把這模塊連同類加載器一起換掉就實現了代碼的熱替換。例如OSGi的出現,在OSGi環境下類加載器不再是雙親委派模型中的樹狀結構,而是進一步發展為網狀結構

到此,相信大家對“怎么破壞Java雙親委派模型”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!


當前標題:怎么破壞Java雙親委派模型
新聞來源:http://www.xueling.net.cn/article/gsppid.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 日本激情动作片免费看 | 日本爽快片视频 | 日本性视频在线 | 在线日韩国产 | 亚洲精品久久无码AV片软件 | 国产精品97色色 | 午夜一级毛片 | 粉嫩饱饱鱼一线天在线观看 | 国产浮力第一页草草影院 | 国产无套码AⅤ在线观看在线播放 | 国产精品不卡一区二区三区在线观看 | 日韩在线中文视频 | 亚洲欧洲国产精品一区 | 漂亮人妇中出中文字幕在线 | 色九九九九九 | 一二三四在线播放免费观看中文版视频 | 日韩精品一区二区三区swag | 密室大逃脱第三季免费观看高清 | 久久一区二区三 | 91草在线视频 | yy1111111少妇影院光屁股 | av在线网站免费观看 | 亚洲高清一二三区 | 成人亚洲一区二区三区在线 | 草蹓视频在线观看 | 精品久久一区二区 | 国产美女一区二区三区在线观看 | 国产足浴漂亮丰满技师av | 亚洲AV无码成人精品区蜜桃 | 久久国产精品视频一区 | 日韩一二三区视频 | 人妻精品动漫H无码 | 久久色亚洲 | 九色精品国产 | 日韩在线永久免费播放 | 欧洲女人牲交视频免费 | 久久产精品一区二区三区污欧美 | 成人在线视频亚洲 | 欧美精品在线免费观看 | 国产欧美性 | a∨天堂亚洲区无码先锋影音 |