Почему классы классов должны быть сериализованы?
Я видел классы bean в сообщениях о Spring MVC, и они всегда объявляются сериализованными и имеют private static final long serialVersionUID
. Зачем?
Одна из веских причин в отношении сервлетов заключается в том, что если вы помещаете сериализуемые компоненты в ваш сеанс веб-сервера, ваш веб-сервер может сериализовать их на диск, если он отключится, а затем десериализовать их обратно в память при запуске. Таким образом, пользователи не потеряют свои сеансы/логины при возврате сервера.
Если в сеансе есть какие-либо несериализуемые компоненты, tomcat не сможет сериализовать сеансы на диск.
Я считаю, что это также необходимо, если вы хотите синхронизировать сеансы между несколькими серверами в кластере.
В соответствии с спецификацией JavaBean компоненты bean должны быть сериализованы. Фактически любой Java-класс может быть компонентом, если он обладает следующими свойствами:
serializable
См. Определение википедии bean. По определению они сериализуемы.
И serialVersionUID
используется как универсальный идентификатор версии для класса Serializable
. После того, как класс будет сериализован при начале процесса десериализации, это число используется для обеспечения того, чтобы загруженный класс соответствовал точно сериализованному объекту.