大家好:我有这样一个问题。如何根据 类的名称 来得到 该类的 Class 对象。比如 根据 com.test.User  来得到 User.class?
对于这种方式 Class user = Class.forName("com.test.User"); 是不行的,效率太慢了,大概需要220ms左右。希望各位帮帮忙,谢谢! 最好有 spring 或 hibernate  反射方式最好了,他们的速度 就挺快的。呵呵!

解决方案 »

  1.   

    spring 的反射:BeanFactory factory = new XmlBeanFactory(resource);
    myObj = (Object) factory.getBean(beanName);
      

  2.   

    启动的时候就执行Class user = Class.forName("com.test.User"),然后把生成的Class缓存起来,以后就不用每次用到都重新执行了。
      

  3.   

    Class user = Class.forName("com.test.User")这句调用在User类没有加载到内存的时候才会慢,后续就不用加载了,如果是简单的例子,第一次执行可能非常耗时另外,对于Method对象可以缓存起来,查找这个对象是个耗时点
      

  4.   

    spring 或 hibernate 可不是每次都反射 而是已经反射好了 放到缓存中 每次直接用 所以才效率高
      

  5.   

    谢谢ls的各位,我现在的需求是 只需要得到 User 的 Class 就可以了,并不需要 调用 User 里面的方法。还有就是 缓存中 放 很多类(大约 150 个左右),影响会很大吗?如果这样会很多 的话,那spring hibernate 放的也不少啊??
    还请各位给解释一下?
    谢谢
      

  6.   


    那你还要这 Class 干嘛 反正你也不调用他的方法,你直接存类名字符串好了.
    奇怪的需求,背后大多都有一个莫名其妙的愚蠢设计。
      

  7.   


    我用 Class 不一定就得是 我用它的方法什么的进行代理反射什么的。第三方的类库需要 的就是一个 Class 。明白了吗??????????
      

  8.   

    Class user = Class.forName("com.test.User") 是从本地文件加载到内存当中的字节码取得,
    而后进行缓存,如果你想要速度快,当然也有现成的框架如asm
      

  9.   

    200ms?不可能。你测试有问题。有2ms就不错了。
      

  10.   


    可不可以提供 一段 关于这个的 代码,我看api的时候 不知道哪个类 是干这个的,谢谢
      

  11.   

    Method ForName ClassLoader 等这是需要掌握的JAVA知识,研究spring 等框架需要这基础知识