Что такое Java-бин? [Дубликат]

Possible Duplicate:
What's the point of beans?

Что такое Javabean? Для чего его используют? А какие примеры кода? Я слышал, это используется для чего-то общего с методами получения и установки? Я весьма озадачен тем, что такое Java-бин и где вы вообще к нему обращаетесь. Я гуглил его, но не смог найти однозначного ответа.

 Christopher Kyle Horton07 мая 2017 г., 04:19
FWIW, это первый вопрос переполнения стека, который появляется, когда я ищу информацию о том, что такое Java Bean в Google. Очень полезно в качестве «указателя» вопрос.

Ответы на вопрос(4)

Если вы говорите оjava-beans and NOT EJB Beansтогда вот объяснение ...

1. JavaBean имеет конструктор, который не принимает аргументов.

2. JavaBean имеет набор свойств.

3. JavaBean имеет методы доступа (getXxx или isXxx для логических свойств) и методы-мутаторы (setXxx), которые разрешают доступ к его базовым свойствам.

The 3rd point states a java class with private instance variables and public getter, setter.

например:

import java.util.Date;

public class User {
    private Date loginDate;
    private String name;
    private String password;

    public User() { }

    public Date getLoginDate() {
        return loginDate;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void delete() {
        // code to delete user from database
    }

    public void update() {
        // code to update user in database
    }

    public static User getUser(String name) {
        // code returning a new User object
        // populated from the database
    }
}

Java Bean - это обычный Java-класс, который имеет частные свойства со своим открытым методом get и setter.

Java Beans обычно используются в качестве вспомогательного класса.

Пример -

public class User implements java.io.Serializable {

    private String name;
    private Integer age;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

    public Integer getAge(){
        return this.age;
    }

    public void setAge(Integer age){
        this.age = age;
    }
}

ВнедрениеSerializable не является обязательным, но очень полезно, если вы хотите сохранить или перенести Javabeans за пределы памяти Java, например, на жестком диске или по сети.

Места, где используются JavaBeans?

 07 мая 2017 г., 04:25
@IlyaBuziuk Согласноthisобщедоступный конструктор по умолчанию будет автоматически предоставлен Java, если он явно не определен. Я хотел бы принять это, чтобы означать, что вы должны быть в безопасности, опуская один для определения бина.
 12 авг. 2015 г., 10:51
как насчет публичного конструктора по умолчанию?
 04 июл. 2018 г., 10:37
Так что, если это просто нормальный класс, зачем вообще называть его бобом? Я не понимаю D:

Итак, API JavaBean определяет ряд соглашений, касающихся JavaBeans. Согласно Википедии:

The required conventions are as follows:

The class must have a public default constructor (no-argument). This allows easy instantiation within editing and activation frameworks. The class properties must be accessible using get, set, is (used for boolean properties instead of get) and other methods (so-called accessor methods and mutator methods), following a standard naming convention. This allows easy automated inspection and updating of bean state within frameworks, many of which include custom editors for various types of properties. Setters must receive only one argument. The class should be serializable. It allows applications and frameworks to reliably save, store, and restore the bean's state in a fashion independent of the VM and of the platform.

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

public class Person implements Serializable
{
  private String name;
  private boolean alive;

  public Person()
  {
    // constructor logic...
  }

  public String getName()
  {
    return name;
  }

  public void setName(String name)
  {
    this.name = name;
  }

  public boolean isAlive()
  {
    return alive;
  }

  public void setAlive(boolean alive)
  {
    this.alive = alive;
  }
}

Как видите, свойства отражаются в методах получения и установки.

НТН

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

преимущества

A Bean obtains all of the benefits of Java's "write once, run anywhere" paradigm. The properties, events, and methods of a Bean that are exposed to another application can be controlled. Auxiliary software can be provided to help configure a Bean. The configuration settings of a Bean can be saved in a persistent storage and can be restored at a later time. A Bean may register to receive events from other objects and can generate events that are sent to it.

Недостатки

A class with a nullary constructor is subject to being instantiated in an invalid state. If such a class is instantiated manually by a developer (rather than automatically by some kind of framework), the developer might not realize that he has instantiated the class in an invalid state. The compiler can’t detect such a problem, and even if it’s documented, there’s no guarantee that the developer will see the documentation. Having to create a getter for every property and a setter for many, most, or all of them, creates an immense amount of boilerplate code.

Пример :

package beans;

/**
 * Class <code>PersonBean</code>.
 */
public class PersonBean implements java.io.Serializable {

    private String name;

    private boolean deceased;

    /** No-arg constructor (takes no arguments). */
    public PersonBean() {
    }

    /**
     * Property <code>name</code> (note capitalization) readable/writable.
     */
    public String getName() {
        return this.name;
    }

    /**
     * Setter for property <code>name</code>.
     * @param name
     */
    public void setName(final String name) {
        this.name = name;
    }

    /**
     * Getter for property "deceased"
     * Different syntax for a boolean field (is vs. get)
     */
    public boolean isDeceased() {
        return this.deceased;
    }

    /**
     * Setter for property <code>deceased</code>.
     * @param deceased
     */
    public void setDeceased(final boolean deceased) {
        this.deceased = deceased;
    }
}

обращатьсяhttp://en.wikipedia.org/wiki/JavaBeans

Ваш ответ на вопрос