В чем разница между обычным объектом и JavaBean?

«В чем разница между обычным объектом и JavaBean?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Обычный объект (POJO - Plain Old Java Object) — это любой экземпляр класса, созданный через new. Он не обязан следовать каким-либо специальным конвенциям.

JavaBean — это специальный вид POJO, который следует строгим соглашениям (конвенциям):

  1. Конструктор без аргументов: Должен иметь public no-args конструктор.
  2. Свойства (properties): Доступ к приватным полям осуществляется только через геттеры и сеттеры.
  3. Сериализуемость: Должен реализовывать интерфейс java.io.Serializable (маркерный интерфейс).

Пример класса JavaBean:

import java.io.Serializable;

public class User implements Serializable { // Правило 3: Serializable
    // Приватные поля
    private String name;
    private int age;

    // Правило 1: Конструктор без аргументов
    public User() {}

    // Правило 2: Геттеры и сеттеры (соглашение getName/setName)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

Зачем нужны JavaBeans? Эта стандартная конвенция позволяет фреймворкам (таким как Spring для инъекции свойств, Hibernate для ORM, Jakarta EE, библиотекам для работы с отражением (Reflection) и инструментам визуальной разработки) единообразно инспектировать, создавать и манипулировать объектами. Обычный объект таких ограничений не имеет.