Why Java Beans have to be serializable?

java, javabeans

Solution

It's one of the "typical" features as described in the Javabeans specification.

Here's an extract of chapter 2.1 What is a bean?

Individual Java Beans will vary in the functionality they support, but the typical unifying features that distinguish a Java Bean are:

- Support for “introspection” so that a builder tool can analyze how a bean works

- Support for “customization” so that when using an application builder a user can customize the appearance and behaviour of a bean.

- Support for “events” as a simple communication metaphor than can be used to connect up beans.

- Support for “properties”, both for customization and for programmatic use.

- Support for persistence, so that a bean can be customized in an application builder and then have its customized state saved away and reloaded later.

And here's an extract of chapter 5.5 Summary of Persistence:

All beans must support either Serialization or Externalization.

In practice, it's not explicitly necessary for it to function. It will in general also just work fine without implementing `Serializable`. It's however useful whenever you'd like to store them "plain" on harddisk or send "plain" over network. For example when it's a session scoped bean which is to be stored in the HTTP session and the server is been confugured to persist and revive HTTP sessions during shutdown/restart. At any way, whenever you face a `NotSerializableException` with the bean's full qualified classname in the message, then it's enough sign to let it implement `Serializable`.

Problem

Is it necessary that a Java Bean implements the `Serializable` interface?

Original source