一道笔试题:请谈谈java中反射机制的意义,并列举几个成功运用反射机制的框架库。哪位高人能给我说说啊!谢了哈!

解决方案 »

  1.   

    类的自动化测试。Tomcat运行ServletStruts,Spring,Tomcat加载某些组件,都可能是反射的。
      

  2.   

    但凡一个 class 的全路径以字符串的形式出现在程序中或者是配置文件中,大概就是要被以反射的形式加载了~~
      

  3.   

    JUnit用了反射机制插一段实例程序(摘自Junit)
    public TestSuite(final Class theClass) {
    fName = theClass.getName();
    try {
    getTestConstructor(theClass); // Avoid generating multiple error
    // messages
    } catch (NoSuchMethodException e) {
    addTest(warning("Class "
    + theClass.getName()
    + " has no public constructor TestCase(String name) or TestCase()"));
    return;
    } if (!Modifier.isPublic(theClass.getModifiers())) {
    addTest(warning("Class " + theClass.getName() + " is not public"));
    return;
    } Class superClass = theClass;
    Vector names = new Vector();
    while (Test.class.isAssignableFrom(superClass)) {
    Method[] methods = superClass.getDeclaredMethods();
    for (int i = 0; i < methods.length; i++) {
    addTestMethod(methods[i], names, theClass);
    }
    superClass = superClass.getSuperclass();
    }
    if (fTests.size() == 0)
    addTest(warning("No tests found in " + theClass.getName()));
    }
      

  4.   

    刚给别人贴了一段代码,顺手也贴在这里吧,猜猜看这个是干什么的
    public static void mapObjectToRecord(Object obj, ResultSet rs){
    if (obj!=null || rs!=null){
    String fieldName;
    Class cla=obj.getClass();
    StringBuffer setterName;
    try {
    ResultSetMetaData rsmeta=rs.getMetaData();

    int columnCount=rsmeta.getColumnCount();
    Field[] fields =obj.getClass().getDeclaredFields();

    for (int i=1;i<=columnCount;i++){
    String columnName=rsmeta.getColumnName(i);
    try {
    for (Field field:fields){
    fieldName=field.getName();
    if (field.getAnnotation(DBReadOnly.class) == null) {
    if (fieldName.equalsIgnoreCase(columnName)) {
    setterName = new StringBuffer("get");
    setterName.append(fieldName.substring(0, 1)
    .toUpperCase());
    setterName.append(fieldName.substring(1));
    Method method = cla.getMethod(setterName
    .toString(), new Class[] {});
    Object value = method.invoke(obj,
    new Object[] {});
    rs.updateObject(i, value);

    }
    }
    }

    } catch (Exception e) {
    e.printStackTrace();
    } }


    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }