example - javabeans habrahabr




Что такое JavaBean? (10)

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

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

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

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


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

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

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


Java Bean по существу является классом, который классифицирует класс как bean-компонент: 1. Он должен реализовывать сериализуемый интерфейс (интерфейс Marker). 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;
}}

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

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

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


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

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

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

Что касается Serializable , из Serializable :

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

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

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

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


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


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

1. импортировать java.io.Serializable

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

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

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

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

Свойства JavaBeans

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

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

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

  3. Все свойства JavaBean должны иметь общедоступный метод 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;
   }
}

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

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

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

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

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


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


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

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

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







serializable