需要JavaBean实用程序

时间:2011-05-25 09:18:31

标签: java javabeans

有没有办法用给定的getter方法获取字段名称。

我通过使用反射API获取所有getter(s)(getYYY)。现在我想知道'yyy'的价值。这样我就可以使用像#{bean.yyy}这样的表达式来访问这个getter方法。

示例如下所示。

getId - id

getID - ID(我认为它可能是'iD',但它应该是'ID')

getNPI - NPI

getNPi - NPi

getNpi - npi

getNpI - npI

请指出java bean约定资源(如果有的话)。

2 个答案:

答案 0 :(得分:1)

您可以从Oracle网站下载JavaBeans spec

您可以使用java.beans包内省bean:

public class FooBean implements Serializable {
  private String ID;
  public String getID() { return ID; }
  public void setID(String iD) { ID = iD; }

  public static void main(String[] args) throws Exception {
    for (PropertyDescriptor property : Introspector.getBeanInfo(FooBean.class)
        .getPropertyDescriptors()) {
      System.out.println(property.getName()
          + (property.getWriteMethod() == null ? " (readonly)" : ""));
    }
  }
}

如果您确定要,您还可以测试属性绑定表达式using a an EL implementation

答案 1 :(得分:1)

您可以使用Java Beans API(包java.beans)而不是直接使用反射来获取类的bean属性。例如:

import java.beans.*;

// ...
MyBean bean = ...;

BeanInfo beanInfo = Introspector.getBeanInfo(MyBean.class, Object.class);

for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
    System.out.println("Property: " + pd.getName());

    // Get the getter method of a property
    Method getter = pd.getReadMethod();

    // Call it to get the value in an instance of the bean class
    Object value = getter.invoke(bean);

    System.out.println("Value: " + value);
}

(注意:省略了异常处理)。