热部署类加载器
熱部署類加載器
? 當我們調用loadClass方法加載類時,會采用雙親委派模式,即如果類已經被加載,就從緩存中獲取,不會重新加載。如果同一個class被同一個類加載器多次加載,則會報錯。因此,我們要實現熱部署讓同一個class文件被不同的類加載器重復加載即可。但是不能調用loadClass方法,而應該調用findClass方法,避開雙親委托模式,從而實現同一個類被多次加載,實現熱部署。
MyFileClassLoader myFileClassLoader1 = new MyFileClassLoader("d:/",null); MyFileClassLoader myFileClassLoader2 = new MyFileClassLoader("d:/",myFileClassLoader1); Class clazz1 = myFileClassLoader1.loadClass("com.itheima.Demo"); Class clazz2 = myFileClassLoader2.loadClass("com.itheima.Demo"); System.out.println("class1:"+clazz1.hashCode()); System.out.println("class2:"+clazz2.hashCode()); 結果:class1和class2的hashCode一致MyFileClassLoader myFileClassLoader1 = new MyFileClassLoader("d:/",null); MyFileClassLoader myFileClassLoader2 = new MyFileClassLoader("d:/",myFileClassLoader1); Class clazz3 = myFileClassLoader1.findClass("com.itheima.Demo"); Class clazz4 = myFileClassLoader2.findClass("com.itheima.Demo"); System.out.println("class3:"+clazz3.hashCode()); System.out.println("class4:"+clazz4.hashCode()); 結果:class1和class2的hashCode不一致?
總結
 
                            
                        