Java getter用于类的不存在的属性

我在Java中使用了一些我并不理解的function,因此我想阅读它以便我可以更有效地使用它。 问题是我不知道它叫什么,因此很难获得更多信息:

我有一个类Foo定义如下:

 private String _name; private Bar _bar; //getters and setters 

Bar

 private String _code; //getters and setters public String get_isCodeSmith() { boolean rVal = _code.toLowerCase().contains("smith"); return rVal; } 

不知何故,在我的JSP页面中(当我有一个名为FooSession变量时)我能够编写如下逻辑标记:

  

即使我的类Bar没有属性_isCodeSmith ,它get_isCodeSmith()自动运行get_isCodeSmith()方法。

这叫什么,我在哪里可以找到更多?

这是Javabeans机制 。 属性不是由字段标识,而是由getter(访问器)和/或setter(mutator)方法标识。

有关更多技术信息,请阅读JavaBeans规范

或者看看这个简单的测试类:

 public class TestBean { private String complete; public String getComplete() { return complete; } public void setComplete(final String complete) { this.complete = complete; } private String getterOnly; public String getGetterOnly() { return getterOnly; } private String setterOnly; public void setSetterOnly(final String setterOnly) { this.setterOnly = setterOnly; } public String getNoBackingField() { return ""; } } 

和简单的JavaBeans分析:

 public class Test { public static void analyzeBeanProperties(final Class clazz) throws Exception { for (final PropertyDescriptor propertyDescriptor : Introspector.getBeanInfo(clazz, Object.class).getPropertyDescriptors()) { System.out.println("Property name: " + propertyDescriptor.getName()); System.out.println("Getter method: " + propertyDescriptor.getReadMethod()); System.out.println("Setter method: " + propertyDescriptor.getWriteMethod()); System.out.println(); } } public static void main(final String[] args) throws Exception { analyzeBeanProperties(TestBean.class); } } 

输出:

 Property name: complete Getter method: public java.lang.String test.bean.TestBean.getComplete() Setter method: public void test.bean.TestBean.setComplete(java.lang.String) Property name: getterOnly Getter method: public java.lang.String test.bean.TestBean.getGetterOnly() Setter method: null Property name: noBackingField Getter method: public java.lang.String test.bean.TestBean.getNoBackingField() Setter method: null Property name: setterOnly Getter method: null Setter method: public void test.bean.TestBean.setSetterOnly(java.lang.String) 
  

表示Foo.getA()。getB()。getC()

如果字段存在则无关紧要。 只有吸气剂是强制性的。