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.