Что такое JavaBean? - PullRequest
       45

Что такое JavaBean?

1593 голосов
/ 21 июля 2010

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

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

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

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

Ответы [ 15 ]

1782 голосов
/ 21 июля 2010

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

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

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

Относительно Serializable, из документации API :

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

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

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

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

267 голосов
/ 21 июля 2010

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

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

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

Обновление:

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

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

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

87 голосов
/ 21 июля 2010

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

  1. реализовать java.io.Serializable интерфейс - чтобы сохранить состояние объект
  2. использовать открытый пустой конструктор аргумента - для создания экземпляра объекта
  3. предоставляет общедоступные методы получения / установки - для получения и установки значений приватных переменных (свойств).
55 голосов
/ 24 января 2014

Свойства JavaBeans

JavaBean - это объект Java, который удовлетворяет определенным правилам программирования:

  1. Класс JavaBean должен реализовывать либо Serializable, либо Externalizable

  2. Класс JavaBean должен иметь конструктор без аргументов

  3. Все свойства JavaBean должны иметь публичные методы установки и получения

  4. Все переменные экземпляра JavaBean должны быть закрытыми

Пример JavaBeans

@Entity
public class Employee implements Serializable{

   @Id
   private int id;
   private String name;   
   private int salary;  

   public Employee() {}

   public Employee(String name, int salary) {
      this.name = name;
      this.salary = salary;
   }
   public int getId() {
      return id;
   }
   public void setId( int id ) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName( String name ) {
      this.name = name;
   }
   public int getSalary() {
      return salary;
   }
   public void setSalary( int salary ) {
      this.salary = salary;
   }
}
18 голосов
/ 22 августа 2015

Пояснение с примером.

1.import java.io.Serializable

Что касается сериализации, см. документацию .

2.приватные поля

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

3.Конструктор

Открытый конструктор без аргументов.

4.getter / setter

Методы получения и установки для доступа и изменения приватных полей.

/** 1. import java.io.Serializable */
public class User implements java.io.Serializable {
    /** 2. private fields */
    private int id;
    private String name;

    /** 3. Constructor */
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    /** 4. getter/setter */
    // getter
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    // setter
    public void setId(int id) {
        this.id = is;
    }
    public void setName(String name) {
        this.name = name;
    }
}
18 голосов
/ 23 сентября 2013

Java Beans используют для меньшего количества кода и большего рабочего подхода ... Java Beans используются в Java EE как универсальный контракт для обнаружения и доступа во время выполнения.Например, JavaServer Pages (JSP) использует Java Beans в качестве объектов передачи данных между страницами или между сервлетами и JSP.JavaBEans Activation Framework использует Java Bean для интеграции поддержки типов данных MIME в Java EE.API управления Java EE использует JavaBeans в качестве основы для инструментария ресурсов, которыми нужно управлять в среде Java EE.

О сериализации:

При сериализации объекта объект может быть представлен в виде последовательности байтов, которая включает данные объекта, а также информацию о типе объекта и типах данных, хранящихся в объекте..

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

17 голосов
/ 21 июля 2010

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

9 голосов
/ 21 мая 2016

Java Beans - это стандарт, и его базовые требования к синтаксису были четко объяснены другими ответами.

Однако, IMO, это больше, чем простой стандарт синтаксиса.Реальное значение или предполагаемое использование Java Beans, вместе с различными инструментальными средствами поддержки, соответствующими стандарту, облегчают повторное использование кода и разработку программного обеспечения на основе компонентов, т.е. позволяют разработчикам создавать приложения путем сборки существующих компонентов (классов) и без необходимости писать какие-либокод (или нужно только написать немного кода клея).К сожалению, эта технология слишком недооценена и недостаточно используется в отрасли, о чем можно узнать из ответов в этой теме.

Если вы прочитали учебное руководство Oracle по Java Beans , вы можетеполучить лучшее понимание в этом.

9 голосов
/ 16 июня 2014

Согласно Википедии:

  1. Класс должен иметь открытый конструктор по умолчанию (без аргументов).Это позволяет легко создавать экземпляры в средах редактирования и активации.

  2. Свойства класса должны быть доступны с помощью get, set, is (может использоваться для логических свойств вместо get) и других методов (так называемые методы доступа и методы-мутаторы) в соответствии со стандартным соглашением об именах.Это позволяет легко автоматизировать проверку и обновление состояния компонента в рамках, многие из которых включают настраиваемые редакторы для различных типов свойств.Сеттеры могут иметь один или несколько аргументов.

  3. Класс должен быть сериализуемым.[Это позволяет приложениям и инфраструктурам надежно сохранять, хранить и восстанавливать состояние компонента независимо от ВМ и платформы.]

Для получения дополнительной информации следуйте этому ссылка.

7 голосов
/ 06 декабря 2016

Java Bean - это Java-класс [концептуальный], который должен следовать следующим соглашениям:

  1. Он должен иметь конструктор без аргументов.
  2. Должен быть сериализуемым.
  3. Он должен предоставлять методы для установки и получения значений свойств, известные как методы получения и установки.

Это программный компонент многократного использования. Он может инкапсулировать множество объектов в один объект, так что один и тот же объект может быть доступен из нескольких мест, и это шаг к простому обслуживанию кода.

...