Что такое JavaBean?

См.: http://bytes.com/topic/python/answers/676275-pytz-giving-incorrect-offset-timezone

В комментариях кто-то предлагает использовать tzinfo.localize() вместо конструктора datetime, что делает трюк.

>>> tz = timezone('Asia/Kolkata')
>>> dt = tz.localize(datetime.datetime(2011, 6, 20, 0, 0, 0, 0))
>>> dt
datetime.datetime(2011, 6, 20, 0, 0, tzinfo=)

UPDATE: Фактически на официальном сайте pytz указано, что вы всегда должны использовать localize или astimezone вместо передачи объекта часового пояса в datetime.datetime.

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

6 ответов

JavaBean - это просто стандарт

  1. Все свойства частные (используйте геттеры / сеттеры )
  2. Открытый конструктор без аргументов
  3. Реализует Serializable .

Вот и все. Это просто условность. Однако от этого зависит множество библиотек.

Что касается Serializable , из документации API :

Сериализуемость класса обеспечивается классом, реализующим java.io.Serializable интерфейс. Классы, которые не реализуют это интерфейс не будет сериализовать или десериализовать какое-либо состояние. Все подтипы сериализуемого класса сами сериализуемы. В интерфейс сериализации не имеет методов или полей и служит только для определить семантику сериализуемости.

Другими словами, сериализуемые объекты могут быть записаны в потоки и, следовательно, в файлы, объектные базы данных, что угодно на самом деле.

Кроме того, нет синтаксической разницы между JavaBean и другим классом - класс является JavaBean, если он соответствует стандартам.

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

1876
ответ дан 22 November 2019 в 20:09
поделиться

Боб класс 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
поделиться

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

7
ответ дан 22 November 2019 в 20:09
поделиться

Вы найдете сериализацию полезной при развертывании вашего проекта на нескольких серверах. так как бобы будут сохраняться и передаваться между ними.

17
ответ дан 22 November 2019 в 20:09
поделиться

JavaBeans - это классы Java, которые придерживаются чрезвычайно простой схемы кодирования. Все, что вам нужно сделать, это

  1. реализовать интерфейс java.io.Serializable - для сохранения состояния объекта
  2. использовать публичный конструктор с пустым аргументом - для инстанцирования объекта
  3. предоставить публичные методы getter/setter - для получения и установки значений частных переменных (свойств).
91
ответ дан 22 November 2019 в 20:09
поделиться

Для этого есть термин, чтобы сделать его особенным. Реальность далеко не такая загадочная.

По сути, «Бин»:

  • - это сериализуемый объект (то есть он реализует java.io.Serializable и делает это правильно),
  • имеет «свойства», геттеры и сеттеры - это просто методы с определенными именами (например, getFoo () - это геттер для свойства "Foo"), а
  • имеет общедоступный конструктор с 0-аргументом (так что он может быть создается по желанию и настраивается путем установки его свойств).

Обновление:

Что касается Serializable : это не что иное, как «интерфейс маркера» (интерфейс, который не объявляет никаких функций), который сообщает Java, что реализующий класс соглашается (и подразумевает что он способен) "сериализация" - процесс, который преобразует экземпляр в поток байтов. Эти байты могут быть сохранены в файлах, отправлены по сетевому соединению и т. Д. И содержат достаточно информации, чтобы позволить JVM (по крайней мере, той, которая знает о типе объекта) восстановить объект позже - возможно, в другом экземпляре приложение, а то и вообще на другой машине!

Конечно, для этого класс должен соблюдать определенные ограничения.Главный из них заключается в том, что все поля экземпляра должны быть либо примитивными типами (int, bool и т. Д.), Либо экземплярами некоторого класса, который также сериализуем, либо помечены как transient , чтобы Java не пыталась их включить. . (Это, конечно, означает, что переходные поля не выдержат обход потока. Класс, который имеет переходные поля, должен быть подготовлен для их повторной инициализации, если это необходимо.)

Класс которые не могут соблюдать эти ограничения, не должны реализовывать Serializable (и, IIRC, компилятор Java даже не позволит сделать это)

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

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