Что точно означает термин Простой объект Java (POJO)?

Что означает термин Простой объект Java (POJO)? Я ничто не мог найти достаточно объяснительным.

Страница Wikipedia POJO говорит, что POJO является обычный Объект Java и не специальный объект. Теперь, что делает или что не делает и возражает особенный в Java?

Вышеупомянутая страница также говорит, что POJO не придется расширить предварительно указанные классы, реализовать предварительно указанные Интерфейсы или содержать предварительно указанные Аннотации. Делает это также означает, что POJOs не позволяют реализовать интерфейсы как Serializable, Comparable или классы как Апплеты или какой-либо другой написанный пользователем Класс/Интерфейсы?

Кроме того, вышеупомянутая политика (никакое расширение, никакая реализация) означает, что нам не разрешают пользоваться никакими внешними библиотеками?

Где точно POJOs используются?

Править: Чтобы быть точнее, мне разрешают расшириться/реализовать классы/интерфейсы, которые являются частью Java или каких-либо внешних библиотек?

69
задан Ali Dehghani 1 April 2016 в 12:55
поделиться

5 ответов

Обычный старый объект Java :)

Ну, вы говорите так, будто это все ужасные ограничения.

В обычном контексте, когда используется / используется POJO, это больше похоже на преимущество:

Это означает, что любая библиотека / API, с которыми вы работаете, полностью готова работать с объектами Java, которые не были подделаны или обработаны каким-либо образом, т.е. вам не нужно делать ничего особенного, чтобы заставить их работать.

Например, процессор XStream XML (я думаю) успешно сериализует классы Java, которые не реализуют интерфейс Serializable . Это плюс! Многие продукты, работающие с объектами данных, заставляют вас реализовать SomePrivateDataObject или даже расширить класс AbstractPrivateDataObject . Многие библиотеки ожидают поведения bean-компонентов, то есть геттеров и сеттеров.

Обычно все, что работает с POJO, будет работать и с не очень PO-JO. Таким образом, XStream, конечно, также будет сериализовать классы Serializable.

6
ответ дан 24 November 2019 в 13:54
поделиться

Согласно Мартину Фаулеру , он и некоторые другие придумали это как способ описания чего-то, что было стандартным классом в отличие от EJB и т. Д.

10
ответ дан 24 November 2019 в 13:54
поделиться

POJO - это простой старый объект Java - по сравнению с чем-то, требующим от Enterprise Edition (J2EE) материалов (bean-компонентов и т. Д.).

POJO на самом деле не является точным определением, а скорее представляет собой сложный способ описания «обычных» не корпоративных объектов Java. Независимо от того, создает ли объект POJO внешняя библиотека или фреймворк, это в некотором роде в глазах смотрящего, во многом это зависит от того, ЧТО библиотека / фреймворк, хотя я рискну предположить, что фреймворк сделает что-то менее похожее на POJO

4
ответ дан 24 November 2019 в 13:54
поделиться

Использование этого термина подразумевает то, что он должен вам сказать. Если, например, фреймворк внедрения зависимостей сообщает вам, что вы можете внедрить POJO в любой другой POJO, они хотят сказать, что вам не нужно делать ничего особенного: нет необходимости подчиняться каким-либо контрактам с вашим объектом, реализовывать любые интерфейсы или расширить специальные классы. Вы можете просто использовать то, что у вас уже есть.

ОБНОВЛЕНИЕ Приведу еще один пример: в то время как Hibernate может отображать любой POJO (любой созданный вами объект) в таблицы SQL, в Core Data (Objective C на iPhone) ваши объекты должны расширять NSManagedObject, чтобы система могла иметь возможность сохранять их в базе данных. В этом смысле Core Data не может работать с каким-либо POJO (или, скорее, POOCO = PlainOldObjectiveCObject), в то время как Hibernate может. (Я не могу на 100% исправить Core Data, поскольку я только начал его собирать. Любые подсказки / исправления приветствуются :-)).

7
ответ дан 24 November 2019 в 13:54
поделиться

Вся суть POJO в простоте, и вы, кажется, предполагаете, что это нечто более сложное, чем кажется.

Если библиотека поддерживает POJO, это означает, что объект любого класса является приемлемым. Это не означает, что у POJO не может быть аннотаций / интерфейса или что они не будут использоваться, если они есть, но это не является обязательным требованием.

IMHO Вики-страница довольно ясна. Это не говорит о том, что у POJO не может быть аннотаций / интерфейсов.

3
ответ дан 24 November 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: