JavaBean的定义可序列化
提供无参构造
提供getter/setter方法
疑问
在学习 Spring 的过程中发现很多 bean 对象并没有实现 Serializable 接口或提供其他可序列化的操作。这种也叫 bean?或者 bean 也可以不提供序列化操作?
解决
stackoverflow 一番后,发现跟我有同样疑惑的人还不少。
最终答案
用户 keya 的回答如下:JavaBeans:
At a basic level, JavaBeans are simply Java classes which adhere to certain coding conventions. Specifically, classes thathave public default (no argument) constructors
allow access to their properties using accessor (getter and setter) methods
implement java.io.Serializable
Spring Beans:
A Spring bean is basically an object managed by Spring. More specifically, it is an object that is instantiated, configured and otherwise managed by a Spring Framework container. Spring beans are defined in Spring configuration files (or, more recently, with annotations), instantiated by Spring containers, and then injected into applications.
大致翻译JavaBeans:
简单来说,JavaBeans 只是遵循了特定编码规范的 Java 类,即提供默认公有无参构造
提供 getter/setter 方法
实现java.io.Serializable接口
Spring Beans:
Spring bean 是由 Spring 管理的对象。具体来说,它是由 Spring Framework 容器实例化、配置和管理的对象。Spring beans 在 Spring 配置文件中定义(近来更多使用的是注解的方式实现),由 Spring 容器实例化,然后注入到应用程序中(博主理解,即DI)。
补充
答主 keya 还提到Note that Spring beans need not always be JavaBeans. Spring beans might not implement the java.io.Serializable interface, can have arguments in their constructors, etc.
This is the very basic difference between JavaBeans and Spring beans.
For more information, refer to the source of the above text, Shaun Abram’s article JavaBeans vs Spring beans vs POJOs.
大意:Spring beans 不一定是 JavaBeans。Spring beans 可以不实现java.io.Serializable接口,也可以提供有参构造等等。
Shaun Abram 的文章中主要有两点补充:Spring beans 可以是 POJOs 吗?可以是,并且通常是。也可以不是,比如Spring也可以用于EJB(简单理解就是一种重量级Java对象)。
Spring beans 可以是 JavaBeans 吗? 答案同样,可以是,并且通常是。也可以不是。
最后,根据本人实测,Spring bean可以不实现java.io.Serializable接口
可以不提供构造方法
可以不提供getter/setter方法
即,Spring bean 和 JavaBean 没有半毛钱关系。