有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中用于内省的spring库

Java中是否有一个用于内省的类,可以获取类的字段、方法和注释,包括来自超类的字段、方法和注释,以及缓存结果

编辑 每一个主要的框架,比如spring、hibernate和jackson,都会进行某种深度的反省,我很想知道这些库中是否有我可以使用的东西


共 (3) 个答案

  1. # 1 楼答案

    Spring framework的BeanRapper在版本3之后有了很大的改进,这是事实。但是如果你想要一个性能更高的BeaWrrPar,你可能想考虑Juffrou-Exchange的BeaWrase-它在设置和获取值和类型方面更具有实例化和更高的性能。它也比Spring的更灵活

    当然,我有偏见,因为我开发了Juffrou reflect我自己,但我确实认为你可以从我的BeanRapper中获得更多。我在spring的BeanRapper第二版时开始开发它。x和我从那以后就再也不放过了。它也是开源的,所以你完全可以自由使用和修改

    这是一个示例用例:

    BeanWrapper beanWrapper = new BeanWrapper(BeanWrapperContext.create(Programmer.class)); // Programmer extends Person
    beanWrapper.setValue("specialization", "Bean Wrappers :)"); // set value to Programmer's property
    beanWrapper.setValue("firstName", "Carlos"); // set value to Person's property
    beanWrapper.setValue("home.town", "Lisboa");        // set value to a nested bean's property
    for(String propertyName : beanWrapper.getPropertyNames()) {
        Type type = beanWrapper.getType(propertyName);
        Object value = beanWrapper.getValue(propertyName);
        Logger.debug(type + ": " + value);
    }
    Programmer programmer = (Programmer) beanWrapper.getBean();  // get the wrapped object
    BeanWrapperContext context = beanWrapper.getContext(); // Reuse the context and save on introspection overhead
    

    你可以在http://juffrou.sourceforge.net查看。还有一本全面的PDF手册和javadocs,因此您可以从一开始就充分挖掘其潜力。但如果你对它的用途有任何疑问,我很乐意回答

    干杯

    卡洛斯

  2. # 2 楼答案

    我在春天的BeanRapper找到了我想要的东西:

    final BeanWrapper sourceBean = new BeanWrapperImpl(MyType.class);
    final PropertyDescriptor[] propertyDescriptors = sourceBean.getPropertyDescriptors();
    for (final PropertyDescriptor propertyDescriptor : propertyDescriptors) {
       logger.info(propertyDescriptor.getName() + ":" + propertyDescriptor.getPropertyType());
    }
    

    使用BeanRapper,您可以访问所有字段、setter和getter、注释。每个类也被缓存

  3. # 3 楼答案

    你也可能对Commons BeanUtils感兴趣。它提供了一组很好的帮助程序,使InstProspection(主要是JavaBean属性)变得轻而易举