反射机制?

解决方案 »

  1.   

    反射其实就是程序能够自检查自身信息。就像程序会照镜子反光看自己。在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。
    这样可以写出很灵活的程序。
    比如要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy,
    就可以用反射来做,不需要指定每个属性的名字,只要动态从类中取得信息,
    再判断属性名是否相同即可。当然应用还有很多。反射可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。
    hibernate的延迟载入,spring的AOP都是这么实现的反射给Java带来了一些动态性。不过虽然很好,但毕竟还是有一定局限性的。另外ASM,cglib使用还是不放便。因此一些纯动态语言现在是一个重要发展趋势,比如ruby,python等,程序很容易动态生成。 
      

  2.   

    通过反射可以根据类名和方法名动态地去调用相应的类和方法
    下面给个demoimport java.lang.reflect.Method;public class Test{    
        
        public static void main(String [] args){     
            try{
                //实例化类
                People obj=(People)Class.forName("People").newInstance();            
                
                Method method=null;
                //调用setName(String name)方法
                method=obj.getClass().getMethod("setName",new Class[]{String.class});
                method.invoke(obj,new Object[]{"princess"});
                //调用getName()方法
                method=obj.getClass().getMethod("getName");
                String result=(String)method.invoke(obj);
                
                System.out.println("result is : "+result);
            }catch(Exception e){
            }
            System.out.println("...ok...");    
        }    
    }
    class People {
        private String name;
        
        public People(){
            name="no name";
        }
        public People(String name){
            this.name=name;
        }
        //--get set methods--
        public void setName(String name){
            this.name=name;
        }
        public String getName(){
            return this.name;
        }    
    }