Что такое JavaBean точно?

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

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

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

редактировать: если вы можете быть так добры и добавить информацию о Serializable интерфейс, и что это значит, к вашему ответу, я был бы очень благодарен.

15 ответов


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

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

вот именно. Это просто съезд. Хотя от этого зависит множество библиотек.

С уважением Serializable с документация по API:

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

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

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

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


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

в основном, "Боб":

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

обновление:

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

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

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


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

  1. реализовать java.Ио.Сериализуемый интерфейс-для сохранения состояния объект
  2. используйте открытый пустой конструктор аргументов-для создания экземпляра объекта
  3. и предоставить общедоступные методы getter и setter - для получения и установки значений частных переменных (свойств ).

свойства JavaBeans

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

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

  2. класс JavaBean должен иметь конструктор no-arg

  3. все свойства JavaBean должны иметь методы public setter и getter

  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;
   }
}

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

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

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

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


вы найдете сериализацию полезной при развертывании проекта на нескольких серверах, так как бобы будут сохраняться и передаваться через них.


объяснение с примером.

1. импорт java.Ио.Сериализуемый

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

2. частные поля

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

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

общественный конструктор без каких-либо аргументов.

4. getter/setter

методы 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;
    }
}

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

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

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

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

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


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

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

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


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


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

  1. он должен иметь конструктор no-arg.
  2. Он должен быть Сериализуемым.
  3. Он должен предоставлять методы для установки и получения значений свойств, известных как методы getter и setter.

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


они сериализуемы, имеют конструктор с нулевым аргументом и разрешают доступ к свойствам с помощью методов getter и setter. Название "Bean" было дано, чтобы охватить этот стандарт, который направлен на создание многоразовых программных компонентов для Java.according to wiki

объекты, которые образуют основу вашего приложения и управляются контейнером Spring IoC, называются бобами. Боб-это объект, который создается, собирается и иным образом управляется Весенний контейнер МОК. В противном случае, фасоль-это просто один из многих объектов в вашем приложении. according to весна io.


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

существует два основных соглашения, которые должны соблюдаться при создании классов Java Bean:

  • каждый "свойства "класса Java Bean реализуется путем определения двух публичных функций (функция" get "и функция" set")
  • в "операции " класса Java Bean являются другие публичные функции, определенные в классе.

чтобы понять JavaBean, вам нужно заметить следующее: JavaBean является концептуальным материалом и не может представлять класс конкретных вещей

JavaBean-это инструмент разработки, который можно визуализировать в работе многоразовых программных компонентов

JavaBean основан на спецификации Sun JavaBeans и может быть многоразовыми компонентами. Его самой большой особенностью является re-usability.


Java Bean по существу является классом, что классифицирует класс как bean: 1. Он должен реализовать сериализуемый интерфейс (интерфейс маркера). 2. Конструктор должен быть общедоступным и не иметь аргументов (то, что другие люди называют конструктором no-arg). 3. У него должны быть геттер и сеттер.

хорошо отметить, что поле serialVersionUID важно для поддержания состояния объекта. Ниже код квалифицируется как bean:

public class DataDog implements java.io.Serializable {

private static final long serialVersionUID = -3774654564564563L;

private int id;
private String nameOfDog;

//The constructor should NOT have arguments
public DataDog () {}


/** 4. getter/setter */

// getter(s)
public int getId() {
    return id;
}
public String getNameOfDog() {
    return nameOfDog;
}
// setter(s)
public void setId(int id) {
    this.id = id;
}
public void setNameOfDog(String nameOfDog) {
    this.nameOfDog = nameOfDog;
}}