Что такое JavaBean?

Я понял, я думаю, что «Bean» - это класс Java со свойствами и геттерами / сеттерами. Насколько я понимаю, это эквивалент структуры Си. Это правда?

Кроме того, существует ли реальная синтаксическая разница между бином и обычным классом? Есть ли какое-то специальное определение или интерфейс?

В основном, почему для этого существует термин?

Кроме того, что означает интерфейс Serializable?

1604
задан Yu Hao 27 June 2019 в 01:54
поделиться

1 ответ

Боб класс Java с именами методов, которые следуют Бобовым инструкциям Java (также названный шаблонами разработки) для методы свойств , , и события . Таким образом любой открытый метод класса компонента, который не является частью определения свойства, является бобовым методом. Минимально, класс Java даже с любым свойство как единственный участник (конечно, сопроводительный общедоступный метод get и требуемый метод set), открытый метод как единственный участник или всего один регистрационный метод слушателя общественного мероприятия является бобом Java. Кроме того, свойство может или быть свойством только для чтения (имеет метод получателя, но никакой метод set) или свойство только для записи (имеет только метод установщика). Боб Java должен быть общедоступным классом, чтобы быть видимым к любому beanbox инструменту или контейнеру. Контейнер должен быть в состоянии инстанцировать его; таким образом это должно иметь общедоступного конструктора также. спецификация JavaBeans doesn’t требует, чтобы боб имел общедоступного нулевого-args конструктора, явного или по умолчанию, чтобы контейнер инстанцировал ее. Если Вы могли бы предоставить файлу (расширение .ser) содержащий сериализированный экземпляр, beanbox инструмент мог использовать тот файл для инстанцирования опытного боба. Иначе боб должен иметь общедоступного нулевого-args конструктора, или явного или по умолчанию.

, Как только боб инстанцируют, Бобовый API Java (java.beans.*), может анализировать его и назвать методы на нем. Если никакой класс, реализовывая интерфейс BeanInfo или расширяя реализацию BeanInfo, класс SimpleBeanInfo, не доступен, самоанализ включает отражение использования (неявный самоанализ), чтобы изучить методы, поддерживаемые целевым бобом и затем применить простые шаблоны разработки (инструкции) для выведения из тех методов, какие свойства, события и открытые методы поддерживаются. Если класс, реализовывая интерфейс BeanInfo (для боба Foo, это нужно назвать, FooBeanInfo) доступно, API обходит неявный самоанализ и использует открытые методы (getPropertyDescriptor (), getMethodDescriptors (), getEventSetDescriptors ()) этого класса для получения информации. Если расширение класса, SimpleBeanInfo доступен, в зависимости от какого из открытых методов SimpleBeanInfo (getPropertyDescriptor (), getMethodDescriptors (), getEventSetDescriptors ()) переопределяются, это будет использовать те переопределенные методы (методы) получить информацию; для метода, который не переопределяется, it’ll значение по умолчанию к соответствующему неявному самоанализу. Боб нужно инстанцировать так или иначе, даже если никакой неявный самоанализ не несут на нем. Таким образом, требование общественности zeri-args конструктор. Но, конечно, сериализуемый интерфейс или интерфейс Externalizable isn’t необходимый, чтобы это было распознано. Однако Бобовая спецификация Java говорит, ‘We’d также как он, чтобы быть “trivial” для общего падежа крошечного Боба, который просто хочет сохранить его внутреннее состояние, и doesn’t хотят думать об этом. ’ Так, все бобы должны реализовать сериализуемый или интерфейс Externalizable. В целом, спецификация JavaBeans isn’t надежный о том, что составляет боб. Инструменты "Writing JavaBeans components is surprisingly easy. You do not need a special tool and you do not have to implement any interfaces. Writing beans is simply a matter of following certain coding conventions. All you have to do is make your class look like a bean —, которые используют бобы, будут в состоянии распознать и использовать Ваш боб". Тривиально, даже следующим классом является Боб Java,

public class Trivial implements java.io.Serializable {}

Говорят, у бобового конструктора есть некоторые параметры. Предположим, что некоторые - простые типы. Контейнер не мог бы знать что значения присвоить им; даже если это делает, результирующий экземпляр не мог бы быть допускающим повторное использование. Это может иметь смысл, только если пользователь может настроить (определите значения) говорят что аннотации или файлы настройки XML как в бобах Spring. И предположите, что некоторые параметры являются классом или интерфейсными типами. Снова, контейнер не мог бы знать что значения присвоить ему. Это может иметь смысл, только если пользователь может настроить (определите конкретные объекты) говорят аннотации или файлы настройки XML. Однако даже в Spring (через файлы настройки XML), присваивая конкретные объекты (с названиями строк) к аргументам конструктора (атрибут или элемент аргументов конструктора) не безопасно с точки зрения типов; это в основном похоже на инжекцию ресурса. Делание ссылок на другие бобы Spring (названный сотрудниками; через элемент в элементе аргумента конструктора), в основном внедрение зависимости и таким образом безопасный с точки зрения типов. Очевидно, зависимость (боб сотрудника) могла бы иметь конструктора с введенными параметрами; они введенная зависимость (зависимости) могли бы иметь конструктора с параметрами и так далее. В этом сценарии, в конечном счете, Вам были бы нужны некоторые классы компонента (например, MyBean.class), которого контейнер может инстанцировать путем простого вызова нового MyBean (), прежде чем он сможет создать другие сотрудничающие бобы через внедрение зависимости на constructors— таким образом, требование для бобов, чтобы иметь общественность обнуляют-args конструктора. Предположим, если контейнер doesn’t поддерживает внедрение зависимости, и/или doesn’t позволяют присваивать значения простого типа конструктору с помощью некоторых аннотаций или xml файлов конфигурации как в Spring, у бобовых конструкторов shouldn’t есть параметры. Даже для бобового приложения Spring были бы нужны некоторые бобы, чтобы иметь нулевого-args конструктора общественности (например, в сценарии, где Ваше приложение Spring не имеет никакого боба только с простыми типами как аргументы конструктора).

управляемые компоненты JSF, выполненные в веб-контейнере. Они могут быть настроены или с @ManagedBean аннотацией или с файлом ресурсов конфигурации приложения managed-bean.xml. Однако это поддерживает инжекцию через инжекцию ресурса (не безопасный с точки зрения типов) только; не подходящий для инжекции на конструкторах. спецификация JSF требует, чтобы управляемые компоненты имели общедоступный нулевой аргумент конструкторы. Далее это говорит, “As версии 2.3 этой спецификации, использованию средства управляемого компонента, как определено в этом разделе сильно препятствуют. Лучшее и более связно интегрированное решение для решения той же проблемы состоит в том, чтобы использовать Контексты и Внедрение зависимости (CDI), как определено в JSR-365". Другими словами, управляемые компоненты CDI, которые будут использоваться, который предлагает безопасное с точки зрения типов внедрение зависимости на конструкторах, сродни бобам Spring. Спецификация CDI принимает спецификацию Управляемых компонентов, которая относится ко всем контейнерам платформы JEE, не просто ярусу веб-узлов. Таким образом веб-контейнер должен реализовать спецификацию CDI.

Вот извлечение из , спецификация Управляемого компонента “ Управляемые компоненты является контейнерными управляемыми объектами с минимальными требованиями, иначе известными под акронимом “POJOs” (Простые Объекты Java) †¦, они могут рассматриваться как расширенная версия платформы EE Java модели компонента JavaBeans, найденной на Java SE platform†¦. Это won’t быть пропущенным читателем, что Управляемые компоненты имеют предшественника в омонимичном средстве, найденном в Поверхностях JavaServer (JSF) technology†¦ Управляемые компоненты, как определено в этой спецификации, представляет обобщение найденных в JSF; в частности, Управляемые компоненты могут использоваться где угодно в JAVA EE-приложении, не только в веб-модулях. Например, в основной компонентной модели, Управляемые компоненты должны предоставить конструктору без аргументов, но спецификация, которая основывается на Управляемых компонентах, таких как CDI (JSR-299), может ослабить то требование и позволить Управляемым компонентам предоставлять конструкторам более сложные подписи, пока они следуют некоторым четко определенным правилам... Управляемый компонент не должен быть: заключительный класс, абстрактный класс, нестатический внутренний класс. Управляемый компонент не может быть сериализуемым в отличие от регулярного компонента JavaBean. ” Таким образом, спецификация для Управляемых компонентов, иначе известных как POJOs или бобы POJO, позволяет расширение как в CDI.

спецификация CDI переопределяет управляемые компоненты как: При выполнении в EE Java класс Java верхнего уровня является управляемым компонентом, если он отвечает требованиям:

• Это не внутренний класс. • Это - неабстрактный класс или аннотируется @Decorator. • Это не реализует javax.enterprise.inject.spi. Расширение. • Это не аннотируется @Vetoed или в пакете, аннотировал @Vetoed. • Это имеет соответствующего конструктора, также: класс имеет конструктора без параметров, или класс объявляет, что конструктор аннотировал @Inject.

Все классы Java, которые удовлетворяют этим условиям, являются управляемыми компонентами, и таким образом никакое специальное объявление не требуется, чтобы определять управляемый компонент. Или

, если это определяется, чтобы быть управляемым компонентом какой-либо другой спецификацией EE Java и если

• Это не аннотируется определяющей компонент аннотацией EJB или объявляется как класс компонента EJB в ejb-jar.xml.

В отличие от бобов Spring это doesn’t поддерживают конструкторов с простыми типами, которые могли бы быть возможными, если бы это поддерживало конфигурацию с xml файлами конфигурации как в Spring или каких-либо аннотациях.

EJBs, выполненный в контейнере EJB. спецификация говорит: бобовым компонентом сессии “A является Управляемый компонент". Класс “The должен иметь общедоступного конструктора, который не берет аргументов, ” это говорит и для боба сессии и для управляемого сообщениями компонента. Далее, это говорит, класс компонента сессии “The не требуется, чтобы реализовывать интерфейс SessionBean или сериализуемый интерфейс. ” По той же причине как бобы JSF, это, внедрение зависимости EJB3 является в основном инжекцией ресурса, бобы JSF, не поддерживает конструкторов с аргументами, то есть, через внедрение зависимости. Однако, если контейнер EJB реализует CDI, “ Дополнительно: классу можно было аннотировать дополнительного конструктора Вводить аннотацией, “ это говорит и для боба сессии и для управляемого сообщениями компонента, потому что, “An EJB упаковал в бобовый архив CDI и не аннотируемый javax.enterprise.inject. Аннотация, на которую накладывают вето, считается поддерживающим CDI бобом. ”

1
ответ дан 22 November 2019 в 20:09
поделиться
Другие вопросы по тегам:

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