В чем преимущество использования Java Beans? - PullRequest
23 голосов
/ 11 августа 2010

Мне кажется, я понимаю, что такое Java Beans: классы Java, которые содержат конструктор без аргументов, являются сериализуемыми и предоставляют свои поля с помощью методов получения и установки.

  1. Java Bean должен выставить все его полей, чтобы квалифицироваться как bean?Если нет, то нужно ли вообще предоставлять любой ?

  2. Могут ли Java Beans включать конструкторы с аргументами, а также конструктор без аргументов?

  3. Какова цель Java Beans, кроме как соответствовать определенному стилю кодирования?Кажется, много говорят о «бобах это» или «бобах, которые», но я не знаю, почему они особенно полезны.

Я могу полностью получить конструктор без аргументов.Для этого может быть множество причин, и я не удивлюсь, если конструктор без аргументов поможет компилятору выполнить некоторые оптимизации.Я также могу понять, как сделать ваш класс сериализуемым.Даже если класс никогда не сериализован, он может быть, и возвращение к этому задним числом может раздражать (или невозможно в библиотеке в черном ящике).

Но самое любопытное - этоТребование, чтобы все поля были доступны через геттеры и сеттеры.Я использую их в своей работе, когда они мне нужны, но кажется странным, что Java Beans требует их (возможно, все, в зависимости от моего ответа на # 1).Если проблема с отражением, может ли отражение получить поля так же легко?Если проблема заключается не только в установке значения, то может ли отражение использовать метод получения / установки над полем, если метод существует?

Ответы [ 6 ]

13 голосов
/ 11 августа 2010

JavaBean сам по себе не очень интересен, это просто класс Java, который соответствует некоторым стандартам, которые вы перечислили выше.Однако соответствие этому стандарту является одним из столпов, на которых построена инфраструктура Java EE, и она встречается в довольно многих местах.Я подозреваю, что когда вы слышите обо всех замечательных вещах, которые может делать JavaBeans, то, что упоминается в Enterprise JavaBeans (EJB).К вашему сведению, существует несколько различных типов EJB, перечисленных ниже:

  1. Бины сущностей
  2. Сессионные бины с сохранением состояния
  3. Сессионные бины без сохранения состояния

Некоторые подробности теперь следуют ...

Entity Beans

Возможно, вы захотите читать / записывать объекты в / из базовой базы данных.Вы можете использовать JDBC / SQL для этого, но вы также можете использовать среду персистентности.Спецификация Java EE включает в себя спецификацию персистентности, посредством которой вы объявляете свой класс «объектным компонентом», а Java автоматически генерирует таблицы базы данных и логику для сопоставления записей в вашей базе данных и объектов в вашей программе.Первоначально, постоянство было чем-то, что требовало использования сервера приложений (такого как Glassfish, JBoss, Geronimo и т. Д.), Но AFAIK, вы можете использовать его в настольных приложениях без серверного компонента.Фактическая реализация обеспечивается библиотекой более низкого уровня, такой как Eclipselink, Toplink, Hibernate и т. Д., Но Java API абстрагирует любые различия между ними.

Stateful Session Beans

Представьте, что вы хотите создать экземпляр класса Java, который существует в отдельной JVM.JVM могут работать на одном физическом компьютере, но в равной степени могут находиться на отдельных компьютерах, обменивающихся данными по сети.Используя сервер приложений Java EE, вы можете создать класс, экземпляры которого могут создавать клиенты сервера приложений.Эти клиенты могут создавать экземпляры класса, который будет действовать как обычный объект, но любые методы, которые вызываются для этого объекта, выполняются на сервере, а результаты передаются обратно вызывающей стороне.Это в основном объектно-ориентированная форма удаленных вызовов процедур.

Сессионные компоненты без сохранения состояния

Это небольшое изменение в компонентных сессионных компонентах.В случае bean-компонентов с состоянием, если на сервере имеется 1000 клиентов, ему, возможно, придется создать 1000 экземпляров компонента и запомнить, какой экземпляр принадлежит какому клиенту.С bean-компонентами без сохранения состояния сервер создает пул bean-компонентов и не беспокоится о том, какой клиент владеет , какой bean-компонент.Когда клиент вызывает метод, сервер выбирает bean-компонент из пула и использует его, возвращая его в пул по завершении.Вы используете сессионные компоненты с состоянием, когда вы хотите, чтобы сервер запомнил подробности о каждом клиенте, вы будете использовать компоненты без состояния, когда вам не нужно запоминать специфические детали клиента.Обратите внимание, что bean-компоненты без состояния могут иметь состояние, просто это состояние не будет представлять интереса для клиента.

5 голосов
/ 11 августа 2010

Они придерживаются четкой спецификации .

Благодаря этому существует безумно много инструментов, облегчающих работу с Javabeans (или просто наоборот).Существуют инструменты, которые могут автоматически генерировать их на основе некоторых данных в определенном виде ( XML , JSON , CSV , DDL и т. Д.)и / или наоборот, а также для чтения / манипулирования / сопоставления их как Commons BeanUtils , Dozer , EZMorph и так далее.Кроме того, существует множество инфраструктур MVC / ORM, которые работают с Javabeans, например JPA , Hibernate , JSF , Spring и т. Д.Даже немного приличная IDE, такая как Eclipse, знает, как автоматически генерировать Javabeans, основываясь только на некоторых полях.

Это инструменты и платформы Javabeans, которые делают нашу жизнь проще.Именно спецификация Javabeans сделала эти вещи существующими.

2 голосов
/ 11 июля 2017

1) Бины не зависят от платформы, это означает, что они могут быть запущены где угодно.

2) Они могут быть запущены в любой локали и распространены в природе.

3) Методы, свойстваи событиями Бина можно управлять.

4) Легко настроить бины Java.

5) Бин может получать и создавать события.

6) Конфигурациянастройки bean-компонента могут храниться постоянно и могут быть получены в любое время.

2 голосов
/ 11 августа 2010

Прежде всего, Java Bean - это многократно используемый программный компонент .

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

Преимущество этого состоит в том, что вы получаете все эти маленькие кусочки, которые затем можно довольно легко объединить для совместной работы. Кроме того, их легко использовать повторно и проверять на единицу.

Даже если вы не используете какую-либо визуальную среду для объединения bean-компонентов (как предполагает спецификация bean-компонента), это все равно является причиной использования bean-компонентов: для получения небольших фрагментов кода, которые легко использовать.

Если вы не используете визуальный инструмент, не так важно, чтобы ваш бин имел конструктор с 0 аргументами или был сериализуем.

0 голосов
/ 30 ноября 2018

Я предполагаю, что самое большое преимущество бина в том, что можно передавать данные (более или менее) в форме одного объекта. Нет необходимости указывать много параметров в определении метода, вместо этого можно использовать бин и передавать данные в виде объекта напрямую. Это обеспечивает лучшую архитектуру программы ... Это то, что я думаю

0 голосов
/ 11 августа 2010

Самым большим преимуществом является то, что ваши bean-компоненты построены в соответствии со спецификацией и могут использоваться непосредственно с "совместимыми с bean-компонентами" библиотеками и инфраструктурами.

Например, большинство инфраструктур для сериализации (XML, JSON, YAML, ...) часто могут использовать бины напрямую без конфигурации.

...