類加載器:
JVM將類加載過程分為三個步驟:
裝載(Load):加載二進制文件
鏈接(Link)進行了驗證:驗證文件准確性
准備:將靜態變量進行分配內存,初始化其默認值。
解析:符號引用轉換為直接引用
初始化(Initialize): 為靜態變量賦予正確的值;
1)Bootstrap ClassLoader
負責加載$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++實現,不是ClassLoader子類
2)Extension ClassLoader
負責加載java平台中擴展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包
3)App ClassLoader
負責記載classpath中指定的jar包及目錄中class
4)Custom ClassLoader
屬於應用程序根據自身需要自定義的ClassLoader,如tomcat、jboss都會根據j2ee規范自行實現ClassLoader
加載過程中會先檢查類是否被已加載,檢查順序是自底向上,從Custom ClassLoader到BootStrap ClassLoader逐層檢查,只要某個classloader已加載就視為已加載此類,保證此類只所有ClassLoader加載一次。而加載的順序是自頂向下,也就是由上層來逐層嘗試加載此類。
MethodInterceptor接口
繼承Interceptor
intercept方法參數解釋:(猜測)
Object intercept(
Object obj, 我推測實現原理還是依靠繼承增強就是靜態的那種。這個就是自己創建的那個類,每次都自己來一把。
Method method, 目標對象方法
Object[] objs, 目標對象方法的參數
MethodProxy methodProxy 代理的方法
)