Что такое Преимущество использования Java Beans?

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

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

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

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

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

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

24
задан Brian S 8 February 2017 в 00:10
поделиться

4 ответа

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

  1. Entity Beans
  2. Stateful Session Beans
  3. Stateless Session Beans

Теперь некоторые подробности...

Entity Beans

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

Stateful Session Beans

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

Stateless Session Beans

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

14
ответ дан 29 November 2019 в 00:16
поделиться

Они соответствуют четкой спецификации .

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

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

5
ответ дан 29 November 2019 в 00:16
поделиться

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

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

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

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

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

2
ответ дан 29 November 2019 в 00:16
поделиться

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

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

0
ответ дан 29 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

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