JavaBean и связь с BeanInfo, они связаны?

Есть ли связь между JavaBean и BeanInfo? Я читал различные посты / вопросы, и о Java Bean упоминается, что bean - это обычный класс, который придерживается некоторого правила (закрытые члены-члены, getters(), setters(), реализует интерфейс Serializabe...).

Я просматривал книгу "Справочник по Java, 8-е издание" и натолкнулся на BeanInfo в главе "Java Beans". Какое отношение имеет Java Bean к BeanInfo?

Хотя я пытался найти разные посты, я все еще не могу полностью понять, как полезны Java-бины, как следование некоторым правилам классом (таким образом, делая его бином) делает его полезным, чего не может сделать обычный класс Java?

1 ответ

ТЛ; др

  • неявный
    • Соглашения об именах методов getter/setter неявно идентифицируют свойства, когда класс считается JavaBean.
  • Явный
    • Кроме того, вы можете явно идентифицировать эти свойства, определив класс партнера, который реализует BeanInfo интерфейс.
    • В Java 9 и более поздних версиях вы можете использовать аннотации для более удобной реализации BeanInfo,

подробности

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

Вместо этого люди обычно используют подход JavaBeans как способ идентификации свойств. Например, BeanItemContainer в ваадине 7.

Как минимум, JavaBean должен:

Вы можете определить JavaBean неявно или явно.

Соглашения об именах JavaBean

Неявный способ определить JavaBean - через соглашения об именах. Любые методы, начинающиеся с get, set, или же is обнаруживаются отражением / самоанализом и считаются для идентификации свойства. Мнимое свойство может или не может действительно поддерживаться переменной-членом класса.

Если Person класс имеет getEyeColor а также setEyeColor методы, тогда как JavaBean мы воспринимаем свойство eyeColor для чтения и записи. Получатель без установщика делает свойство доступным только для чтения.

BeanInfo интерфейс

Явный способ определить JavaBean состоит в том, чтобы создать другой класс наряду с предполагаемым классом JavaBean. Другой класс реализует BeanInfo интерфейс. Скорее всего, другой класс на самом деле является подклассом SimpleBeanInfo учебный класс. Тот SimpleBeanInfo класс реализует BeanInfo интерфейс в негативной манере, отрицая информацию. Вы переопределяете методы для фрагментов информации, которые вы хотите идентифицировать аспекты вашего класса JavaBean.

Вы можете использовать BeanInfo класс партнера для определения свойств (вместо использования соглашения об именах получателя / установщика). И вы можете определить другие аспекты JavaBean. Многие из этих других аспектов устарели, поскольку они связаны с тем, что JavaBean является виджетом для отображения в средстве создания форм IDE, но некоторые аспекты могут оказаться полезными.

Средства отражения / самоанализа в Java автоматически обнаруживают и обрабатывают ваши классы BeanInfo для предоставления метаданных о ваших классах JavaBean.

Смотрите страницу Oracle Outorial.

BeanInfo Аннотации

Java 9 может помочь с некоторыми аспектами JavaBean: аннотации. Я еще не понял их правильное использование. Я задал в другом вопросе, как использовать новые аннотации BeanInfo в Java 9. Я надеялся, что это позволит аннотировать переменные-члены в качестве свойств, чтобы избежать необходимости писать пустые методы получения / установки - но, очевидно, этот JEP не предоставляет эту функцию (я не совсем уверен).

См. JEP 256: Аннотации BeanInfo по проекту OpenJDK.

JavaBeans spec

JavaBeans - это гораздо больше, чем просто свойства, такие как "eyeColor", хотя свойства, безусловно, являются наиболее распространенной целью использования JavaBeans.

Я предлагаю изучить вполне читаемую спецификацию JavaBeans 1.01. И прочитайте Учебное пособие по Oracle.

Для технического обзора я предлагаю прочитать эту публикацию, спецификацию JavaBeans Стивена Колебурна.

Проверка бобов

По соответствующей теме… Стандарт http://beanvalidation.org/ становится популярным способом объявления и применения бизнес-правил для условий значений данных в объекте. Например, правила могут быть "цвет глаз является обязательным полем и не должно быть нулевой или пустой строкой" или "общая сумма счета должна быть нулевой или положительной, а не отрицательным числом".

Было три версии стандарта (1.0, 1.1 в JSR 349 и 2.0 в JSR 380) и различные реализации. Bean Validation может использоваться как на стороне клиента (Swing, JavaFX и т. Д.), Так и на стороне сервера. Например, Vaadin поддерживает собственную технологию проверки при вводе данных, а также поддерживает подключение к реализации Bean Validation.

Enterprise JavaBeans

Не путайте JavaBeans с Enterprise JavaBeans (EJB). Повторное использование торговой марки "JavaBean" для EJB было плохим решением маркетингового персонала Sun. EJB абсолютно не связан и отличается от оригинального JavaBeans.

Другие вопросы по тегам