转载

java反射机制_读取properties

代码:

java反射机制_读取properties
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /**  * 反射特点:  * 可以在运行期间,动态加载一个类进来,动态new一个对象  * 动态了解对象内部的结构,动态调用这个对象的某一些方法  * 反射好处:  * 在配置文件里只写类的名字,可以动态把类加载进来  * @author Administrator  *  */ public class TestReflection {  public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{   //String  str = "T";   String str = ReadProperties.getClassName();   //把类load到内存,返回Class类型。   Class cls = Class.forName(str);   Object o = cls.newInstance(); //new 一个对象   //得到cls类所有的public方法   Method[] methods = cls.getMethods();   /*//读取所有方法名   for(Method m :methods){    System.out.println(m.getName());   }*/   //调用方法 m2   for(Method m :methods){    if(m.getName().equals("m2")){     //可变参数的方法,o是new的对象     m.invoke(o);    }    if(m.getName().equals("m1")){     //可变参数的方法     m.invoke(o,1,9);     //得到m1方法的参数类型     for(Class paramType : m.getParameterTypes()){      System.out.println(paramType.getName());     }    }    if(m.getName().equals("getS")){     //得到getS方法的返回值类型     Class returnType = m.getReturnType();     System.out.println("getS returnType is :"+returnType);    }   }  } } class T {  static{   //测试是否类是否load到内存   System.out.println("T  loaded...");  }  public T(){   //测试T是否被调用   System.out.println("T  constructed...");  }  int i;  String s;  public void m1(int i,int j) {   this.i = i+j;   System.out.println("i ="+this.i);  }  public void m2(){   System.out.println("m2 invoked...");  }  public String getS() {   return s;  } } 
View Code

读取properties配置的代码:

配置文件内容:

Class=T

java反射机制_读取properties
import java.io.InputStream; import java.util.Properties; public class ReadProperties {    static private String className = null;  static{   loads();  }  synchronized static public void loads(){   if(className == null)   {    InputStream is = ReadProperties.class.getResourceAsStream("/test.properties");    Properties dbProps = new Properties();      try {         dbProps.load(is);         className = dbProps.getProperty("Class");               }       catch (Exception e) {         System.err.println("不能读取属性文件. " +        "请确保配置文件在CLASSPATH指定的路径中");       }   }  }  public static String getClassName() {   if(className==null)    loads();   return className;  }   }
View Code

运行结果:

T loaded...

T constructed...

m2 invoked...

i =10

int

int

getS returnType is :class java.lang.String

正文到此结束
Loading...