Чим відрізняється JavaBean від POJO?


210

Я не впевнений у різниці. Я використовую Hibernate, і в деяких книгах вони використовують JavaBean і POJO як взаємозамінний термін. Хочу знати, чи є різниця не лише в умовах сплячого режиму, а як загальні поняття.

Відповіді:


252

JavaBean дотримується певних умов. Іменування Getter / setter, що має загальнодоступний конструктор за замовчуванням, його серіалізація тощо. Докладніше див. У Конвенціях JavaBeans .

POJO (звичайний-старий-Java-об'єкт) не визначений жорстко. Це об’єкт Java, який не вимагає впроваджувати певний інтерфейс або походить з певного базового класу, або використовувати певні примітки для того, щоб бути сумісним із заданим фреймворком, і може бути будь-яким довільним (часто відносно простим) Об'єкт Java.


41
Зауважте, що JavaBean може бути і зазвичай є POJO, і багато POJO насправді є JavaBeans.
Йоахім Зауер

8
Ні, за визначенням POJO Java Bean не є POJO, тому що, щоб вважатись Java Bean, клас повинен дотримуватися певних умов кодування (наприклад, мати конструктор без аргументів, мати методи, які починаються зі слів "отримати" та / або "встановити") або поширюватися з класом BeanInfo.
Nat

15
Оскільки це конвенції , я думаю, що ви можете успішно стверджувати, що боб може бути POJO (наприклад, ви не успадковуєте інтерфейс JavaBean чи подібний)
Brian Agnew

1
Специфікація JavaBeans не в змозі визначити JavaBean, крім дуже вільно, як "програмний компонент для багаторазового використання" (або якийсь такий). Він не повинен мати конструктор no-arg, не потребує методів, що починаються з "get" або "set", не потребує серіалізму, навіть не повинен бути класом.
Том Хотін - тайклін

4
Математично можна сказати, що Javabeans утворюють підмножину POJO, оскільки специфічні обмеження, які ставляться на POJO, роблять його явабом.
Нішит

106

Усі JavaBeans - POJO, але не всі POJO - це JavaBeans.

JavaBean - це об'єкт Java, який задовольняє певним умовам програмування:

  • клас JavaBean повинен реалізовувати або Serializable, або Externalizable;
  • клас JavaBean повинен мати публічний конструктор no-arg;
  • всі властивості JavaBean повинні мати загальнодоступні методи встановлення та отримання (за необхідності);
  • всі змінні екземплярів JavaBean повинні бути приватними.

1
Я думав, що POJO не можуть реалізувати Serializable.
naXa

10
"клас JavaBean повинен мати конструктор без аргументів;" також додайте сюди публіку
radistao

JavaBean серіалізується, і тому JavaBean НЕ є POJO.
karlihnos

25

За словами Мартіна Фаулера, POJO - це об'єкт, який інкапсулює ділову логіку, тоді як Бін (за винятком визначення, яке вже зазначено в інших відповідях) - це трохи більше, ніж контейнер для зберігання даних, а операції, доступні на об'єкті, просто встановлюють і отримують дані.

Цей термін був введений, поки Ребекка Парсонс, Джош Макензі і я готувались до розмови на конференції у вересні 2000 року. У бесіді ми вказували на багато переваг кодування ділової логіки в звичайні об'єкти Java, а не на використання Entity Beans. Ми поцікавились, чому люди настільки проти використання звичайних об’єктів у своїх системах і зробили висновок, що це тому, що простим об’єктам не вистачає фантазійної назви. Таким чином, ми дали їм один, і це дуже приємно.

http://www.martinfowler.com/bliki/POJO.html


7

POJO: Якщо клас можна виконати з базовим JDK, без будь-якої іншої сторонньої бібліотеки, що підтримується, його називають POJO

JavaBean: Якщо клас містить лише атрибути з аксесуарами (сеттери та getters), вони називаються javabeans.Java квасоля, як правило, не містить ніякої логіки bussiness, а ті, які використовуються для зберігання в ньому деяких даних.

Усі Javabeans - POJO, але всі POJO - не Javabians


7

Pojo - Простий старий об’єкт java

Клас pojo - це звичайний клас без будь-яких спеціальностей, клас повністю вільно поєднаний з технологією / фреймворком. Клас не реалізовується від технології / фреймворку і не поширюється на технологію / фреймворк api, що клас називається pojo class.

Клас pojo може реалізовувати інтерфейси та розширювати класи, але суперклас або інтерфейс не повинні бути технологіями / рамками.

Приклади:

1.

class ABC{
----
}

Клас ABC не впроваджує або не поширюється на технології / рамки, тому це клас pojo.

2.

class ABC extends HttpServlet{
---
}

Клас ABC, що поширюється на сервітську технологію api, тому це не клас pojo.

3.

class ABC implements java.rmi.Remote{
----
}

Клас ABC реалізується з rmi api, тому це не клас pojo.

4.

class ABC implements java.io.Serializable{
---
}

цей інтерфейс є частиною мови java, не є частиною технології / фреймворку. тому це клас pojo.

5.

class ABC extends Thread{
--
}

тут нитка також є класом мови java, тому це також клас pojo.

6.

class ABC extends Test{
--
}

якщо тестовий клас поширюється або реалізується з технологій / фреймворку, то ABC також не є класом pojo, оскільки він успадковує властивості класу Test. якщо тестовий клас не є класом pojo, то клас ABC також не є класом pojo.

7.

зараз цей момент є винятковим випадком

@Entity
class ABC{
--
}

@Entityце анотація, надана сплячою api або jpa api, але ми все ще можемо назвати цей клас класом pojo. Клас з анотаціями, наданими з технології / фреймворку, у цьому винятковому випадку називається класом pojo.



1

POJOSз певними умовами (getter / setter, загальнодоступний конструктор no-arg, приватні змінні) і діють (наприклад, використовуються для читання даних за формою) JAVABEANS.


1

Підсумовуючи: подібність та відмінності:

   java beans:                          Pojo:
-must extends serializable              -no need to extends or implement.
 or externalizable.                     
-must have public class .               - must have public class
-must have private instance variables.      -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor.           - can have constructor with agruments.

Всі боби JAVA - POJO, але не всі POJO - боби JAVA.


0

Ви бачили формальні визначення вище, адже вони варті.

Але не зациклюйтеся на визначеннях. Давайте просто розберемося більше в сенсі речей тут.

JavaBeans використовується в додатках Enterprise Java, де користувачі часто віддалено отримують доступ до даних та / або коду програми, тобто з сервера (через Інтернет або приватну мережу) через мережу. Тому залучені дані повинні передаватися в послідовному форматі на комп'ютери користувачів або з них - отже, необхідність об’єктів Java EE для реалізації інтерфейсу Serializable. Цей характер JavaBean нічим не відрізняється від об'єктів додатків Java SE, дані яких читаються з файлової системи або записуються до них. Надійне використання класів Java по мережі з цілого ряду комбінацій машин / ОС користувача також вимагає прийняття конвенцій про їх обробку. Звідси випливає вимога впроваджувати ці класи як публічні, з приватними атрибутами, конструктором без аргументів та стандартизованими геттерами та сеттерами.

Java-програми EE також використовуватимуть класи, відмінні від тих, які були реалізовані як JavaBeans. Вони можуть бути використані при обробці вхідних даних або організації вихідних даних, але не використовуватимуться для об'єктів, переданих по мережі. Отже, вищезазначені міркування не повинні застосовуватись до їх панелі, яка повинна бути дійсною як об'єкти Java. Ці останні класи називають POJO - Plain Old Java Objects.

Загалом, ви могли бачити Java Beans як просто об'єкти Java, пристосовані для використання в мережі.

У світі програмного забезпечення з 1995 року надзвичайно багато шуму - і не мала кількість балаканини.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.