Я реализовал несколько приложений Java сейчас, только настольные приложения. Я предпочитаю использовать неизменяемые объекты для передачи данных в приложении вместо использования объектов с мутаторами (сеттерами и геттерами), также называемыми JavaBeans.
Но в мире Java, похоже, гораздо чаще используется JavaBeans, и я не могу понять, почему я должен использовать их вместо этого. Лично код выглядит лучше, если он имеет дело только с неизменяемыми объектами, а не с изменением состояния.
Неизменяемые объекты также рекомендуются в Пункт 15: Минимизировать изменчивость, Эффективная Java 2ed.
Если у меня есть объект Person, реализованный как  JavaBean, он будет выглядеть так:
public class Person {
    private String name;
    private Place birthPlace;
    public Person() {}
    public setName(String name) {
        this.name = name;
    }
    public setBirthPlace(Place birthPlace) {
        this.birthPlace = birthPlace;
    }
    public String getName() {
        return name;
    }
    public Place getBirthPlace() {
        return birthPlace;
    }
}
И тот же Person реализован как  неизменный объект:
public class Person {
    private final String name;
    private final Place birthPlace;
    public Person(String name, Place birthPlace) {
        this.name = name;
        this.birthPlace = birthPlace;
    }
    public String getName() {
        return name;
    }
    public Place getBirthPlace() {
        return birthPlace;
    }
}
Или ближе к struct в C:
public class Person {
    public final String name;
    public final Place birthPlace;
    public Person(String name, Place birthPlace) {
        this.name = name;
        this.birthPlace = birthPlace;
    }
}
У меня также могут быть геттеры в неизменяемом объекте, чтобы скрыть детали реализации. Но поскольку я использую его только как struct, я предпочитаю пропустить "геттеры" и сохранить его простым.
Просто я не понимаю, почему лучше использовать JavaBeans, или я могу и должен продолжать работать с моими неизменяемыми POJO?
Многие из библиотек Java, похоже, лучше поддерживают JavaBeans, но, возможно, больше поддержки неизменяемых POJO становится более популярным с течением времени?