JAvaなどのローダと反射
クラスのロード
クラス初期化タイミング
クラスローダ
クラスローダの役割
はんしゃ
反射による構造方法の取得と使用
反射によるメンバー変数の取得と使用
反射によるメンバーメソッドの取得と使用
反射の適用例
ダイナミックエージェント
ダイナミックエージェント
, , , , 。
class , Class 。
Class 。
,
,
クラス初期化タイミング
,
java.lang.Class
java.exe
クラスローダ
.class , Class 。
, 。
Bootstrap ClassLoader
Extension ClassLoader
Sysetm ClassLoader
クラスローダの役割
Bootstrap ClassLoader
, Java
System,String 。 JDK JRE lib rt.jar
Extension ClassLoader
JRE jar 。
JDK JRE lib ext
Sysetm ClassLoader
JVM java class , classpath jar
はんしゃ
JAVA , , ; , ; java 。
, 。 Class . Class .
反射による構造方法の取得と使用
getConstructors
getDeclaredConstructors
newInstance()
con.newInstance(“zhangsan", 20);
反射によるメンバー変数の取得と使用
getFields,getDeclaredFields
getField,getDeclaredField
set(Object obj,Object value) Field 。
反射によるメンバーメソッドの取得と使用
getMethods
getDeclaredMethods
getMethod
getDeclaredMethod
method.setAccessible(true);
反射の適用例
ArrayList , , ?
,
public void setProperty(Object obj, String propertyName, Object value){},
obj propertyName value。
ダイナミックエージェント
: , , 。
:
:
, ,
ダイナミックエージェント
Java java.lang.reflect Proxy InvocationHandler , 。JDK 。 cglib
Proxy
public static Object newProxyInstance(ClassLoader loader,Class>[] interfaces,InvocationHandler h)
InvocationHandler
InvocationHandler
Object invoke(Object proxy,Method method,Object[] args)