您的位置:首页 >JavaBean规范:实体类无参构造与属性私有化详解
发布于2026-04-17 阅读(0)
扫一扫,手机访问
JavaBean必须有public无参构造函数、所有字段private且仅通过public getter/setter访问、建议实现Serializable接口;否则Spring等框架反射创建对象或序列化时会失败。

很多框架(比如Spring、MyBatis、Jackson)依赖反射创建对象,Class.newInstance() 或现代的 Constructor.newInstance() 都要求类存在**public 无参构造函数**。如果只写了带参构造,JVM不会自动补上无参构造,运行时会抛 InstantiationException 或 IllegalAccessException。
public Person() {},哪怕空实现@NoArgsConstructor 可以自动生成,但要注意它默认生成的是 package-private,需加 access = AccessLevel.PUBLICJavaBean 规范强制要求封装:字段不能是 public、protected,也不能包级可见(即默认访问权限)。否则像 ObjectMapper 这类工具可能绕过 setter 直接读写字段,导致逻辑错乱或安全漏洞。
private String name;,不是 String name; 或 public int id;isXxx() 而非 getXxx()(如 isActive()),否则 Jackson、EL 表达式等可能识别失败userName → getUserName() / setUserName(String);大小写敏感,不能写成 getusername()JavaBean 规范本身没强制 Serializable,但实际中几乎离不开它:HTTP Session 存实体、RMI 调用、缓存序列化(如 RedisTemplate)、甚至某些 JSON 库在循环引用检测时也会尝试序列化。不实现会触发 NotSerializableException。
implements Serializable 是最低成本的兼容性保障private static final long serialVersionUID = 1L;,否则不同编译版本反序列化可能失败transient 修饰(如 transient String password;),避免被序列化出去虽然 Map 灵活,但缺少编译期检查、IDE 自动补全弱、无法约束字段类型、JSON 反序列化时容易字段名拼错——这些都会在运行时才暴露。更重要的是,JavaBean 是契约:字段名、类型、可读写性都由方法签名明确定义。
map.get("user_name") 写错了变成 "user_nam",编译不报错,运行 NPEgetUserNmae() 拼错方法名,IDE 立刻标红<resultMap>、Spring MVC 的参数绑定,底层都依赖 JavaBean 的标准访问模式,不是所有 Map 实现都能被正确识别
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9