JavaBeans规范要求getter/setter方法严格按属性名推导:非布尔属性用get/set+首字母大写,布尔类型推荐isXxx()(仅限boolean原始类型),字段含双大写字母时保持原大小写;方法须public、无异常、参数合规,否则框架反射失败。
JavaBeans 规范对 getter 和 setter 方法的命名有明确约定,核心是**基于属性名推导方法名,并区分布尔类型与非布尔类型**。命名不正确会导致框架(如 Spring、Jackson、JSP EL)无法识别属性,引发运行时异常或静默失败。
假设字段名为 propertyName(首字母小写,驼峰式),则:
public String getUserName() { return userName; }
void,且有且仅有一个参数,类型与字段一致,例如:public void setUserName(String userName) { this.userName = userName; }
XMLData),则 getter/setter 直接使用原名大小写(即 getXMLData(),不是 getXmlData())——这是 JavaBeans 规范的特殊约定,用于兼容缩写词。对于 boolean 类型字段,允许两种 getter 形式:
public boolean isActive() { return active; }
public boolean getActive() { return active; }
public void setActive(boolean active) { this.active = active; }
boolean(原始类型)支持 isXxx();Boolean(包装类)应使用 getXxx(),否则部分工具可能无法识别。这些细节看似微小,但极易出错:
立即学习“Java免费学习笔记(深入)”;
user_id)不符合 JavaBeans 推荐命名习惯,应避免;规范只针对标准驼峰标识符设计。public,且不能有额外参数(setter 只能一个)、不能抛受检异常(throws Exception 不被允许)。@JsonProperty 等注解覆盖,可绕过,但违背规范会降低代码可移植性。可通过 Java 内置的 Introspector 测试:
BeanInfo info = Introspector.getBeanInfo(Person.class);PropertyDescriptor[] props = info.getPropertyDescriptors();for (PropertyDescriptor pd : props) { System.out.println(pd.getName() + " → getter: " + pd.getReadMethod());}
如果输出中某个属性的 getReadMethod() 为 null,说明其 getter 未被识别——大概率是命名不合规。