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)