Місця, де використовуються JavaBeans?


172

Що таке JavaBean і навіщо він мені потрібен? Оскільки я можу створювати всі програми зі структурою класу та інтерфейсу? Навіщо мені потрібна квасоля? І чи можете ви надати мені кілька прикладів, коли замість класів та інтерфейсів необхідна квасоля?

Будь-ласка, поясніть істотність квасолі в наступному контексті:

  • Веп-додатки
  • Автономні програми

10
Сподіваюсь, ви не плутаєте між "Java бобами" та "Enterprise Java Beans або EJB".
Рахул

53
насправді я не знаю про саму квасолю, то як я можу плутати з EJB .. чи є щось особливе? ..
Sidharth

Відповіді:


178

Вони часто просто представляють дані реального світу. Ось простий приклад Javabean:

public class User implements java.io.Serializable {

    // Properties.
    private Long id;
    private String name;
    private Date birthdate;

    // Getters.
    public Long getId() { return id; }
    public String getName() { return name; }
    public Date getBirthdate() { return birthdate; }

    // Setters.
    public void setId(Long id) { this.id = id; }
    public void setName(String name) { this.name = name; }
    public void setBirthdate(Date birthdate) { this.birthdate = birthdate; }

    // Important java.lang.Object overrides.
    public boolean equals(Object other) {
        return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
    }
    public int hashCode() {
        return (id != null) ? (getClass().hashCode() + id.hashCode()) : super.hashCode();
    }
    public String toString() {
        return String.format("User[id=%d,name=%s,birthdate=%d]", id, name, birthdate);
    }
}

Реалізація Serializableсама по собі не є обов'язковою, але дуже корисна, якщо ви хочете мати можливість зберігати або переносити Javabeans поза пам'яттю Java, наприклад, у жорсткому диску або через мережу.

Наприклад, клас DAO, ви можете використовувати його для створення списку користувачів, у якому ви зберігаєте дані userтаблиці в базі даних:

List<User> users = new ArrayList<User>();
while (resultSet.next()) {
    User user = new User();
    user.setId(resultSet.getLong("id"));
    user.setName(resultSet.getString("name"));
    user.setBirthdate(resultSet.getDate("birthdate"));
    users.add(user);
}
return users;

Наприклад, клас Servlet, ви можете використовувати його для передачі даних із бази даних до інтерфейсу користувача:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    List<User> users = userDAO.list();
    request.setAttribute("users", users);
    request.getRequestDispatcher("users.jsp").forward(request, response);
}

Наприклад, на сторінці JSP ви можете отримати доступ до неї за допомогою EL , який дотримується конвенцій Javabean, щоб відобразити дані:

<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Birthdate</th>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td><c:out value="${user.name}" /></td>
            <td><fmt:formatDate value="${user.birthdate}" pattern="yyyy-MM-dd" /></td>
        </tr>
    </c:forEach>
</table>

Чи є сенс? Розумієте, це свого роду конвенція, яку ви можете використовувати скрізь для зберігання , передачі та доступу до даних.

Дивитися також:


11
Приємне пояснення, і, як правило, подяка за цю реалізацію Serializable, сама по собі не є обов'язковою, але дуже корисна, якщо ви хочете мати можливість зберігати або переносити Javabeans поза пам'яттю Java, наприклад, у жорсткому диску або через мережу.
agpt

але в java doc згадується, що ми повинні впровадити серіалізацію, щоб ви могли, будь ласка, уточнити це?
SSP

8
@SSP: 1) немає javadoc. 2) "повинен"! = "Повинен".
BalusC

61

Самі боби

JavaBeans є скрізь, вони є умовою, і майже кожна трохи більша бібліотека там використовує ці конвенції для автоматизації речей. Лише кілька причин, чому слід використовувати JavaBeans:

  • Вони добре серіалізуються.
  • Можна приміркувати за допомогою рефлексії.
  • В іншому випадку можна керувати за допомогою відображення дуже легко.
  • Добре підходить для інкапсулювання фактичних даних з бізнес-коду.
  • Поширені умови означають, що кожен може використовувати вашу квасолю, і ви можете ВИКОРИСТОВУВАТИ ВСІ БОЛЬШІ БРАНИ без будь-якої документації / посібника легко та послідовно.
  • Дуже близький до POJO , що насправді означає ще більшу сумісність між окремими частинами системи.

Також, звичайно, є Enterprise JavaBeans, яка зовсім інша справа і не повинна змішуватися з звичайними JavaBeans. Я просто хотів згадати EJB: s, оскільки імена схожі, і їх легко заплутати.

Квасоля у веб-додатках

Якщо ви розглядаєте "звичайні" JavaBeans в контексті веб-додатків, вони мають більше сенсу, ніж носіння взуття на ногах. Оскільки специфікація Servlet вимагає, щоб сеанси були серіалізаційними, це означає, що ви повинні зберігати свої дані в сеансі як щось, що може бути серіалізаційним - чому б тоді не зробити це бобом! Просто киньте свій SomeBusinessDataBean на сеанс, і ви готові йти, смішно просто, сумісні зі специфікаціями та зручно.

Також передача даних навколо програми також дуже проста, оскільки JavaBeans допомагає вам повністю роз'єднати частини програми. Розгляньте JavaBeans як лист та різні підсистеми програми як відділи в дуже великій корпорації: Dept.A надсилає купу даних до Dept.B, Dept.B не знає - і навіть не піклується - звідки дані надійшли як це має бути і може просто відкривати лист, читати з нього речі і робити його на основі цих даних.

Квасоля в автономних додатках

Насправді те, що вище, стосується і автономних додатків, єдина відмінність полягає в тому, що ви можете зіпсувати інтерфейс користувача трохи більше, оскільки автономні програми мають справжній інтерфейс користувача: s, тоді як веб-додатки мають стабільний інтерфейс користувача: s, який у деяких випадках лише імітує справжній інтерфейс користувача: . Через цю різницю легше заплутатися з автономним додатком, але це варто зовсім іншою темою і зовсім не пов’язане безпосередньо з JavaBeans.


50

Бобові - це нічого, насправді. Щоб клас був "бобом", все, що йому потрібно, це:

  • мати публічний, не конструктор аргументів
  • бути серіалізаційними (реалізувати інтерфейс Serializable безпосередньо чи через один із його суперкласів).

До цього ви можете додати getters та setters для властивостей класу, які відповідають певній умові іменування, якщо ви хочете, щоб поля були відкритими за певних обставин (наприклад, зробивши цей клас об'єктом, який ви можете перетягувати з візуального редактора у свій Наприклад, IDE).

Ви можете знайти більше безпосередньо від Sun тут .


15

Java Bean - це програмний компонент, призначений для багаторазового використання в різних середовищах. Немає обмежень у можливостях квасолі. Він може виконувати просту функцію, таку як перевірка написання документа або складну функцію, таку як прогнозування ефективності портфеля акцій. Кінцевий користувач може бачити боб. Одним із прикладів цього є кнопка графічного інтерфейсу користувача. Бін також може бути невидимим для користувача. Програмне забезпечення для декодування потоку мультимедійної інформації в режимі реального часу є прикладом цього типу будівельного блоку. Нарешті, Бін може бути розроблений так, щоб він працював автономно на робочій станції користувача або працював у співпраці з набором інших розподілених компонентів. Програмне забезпечення для створення кругової діаграми з набору точок даних є прикладом Bean, який може виконуватися локально. Однак,

Незабаром ми побачимо, які конкретні зміни розробник програмного забезпечення повинен внести до класу, щоб він був використаний як Java Bean. Однак однією з цілей дизайнерів Java було полегшити використання цієї технології. Тому зміни коду мінімальні.

Переваги Java Beans

Архітектура програмного компонента забезпечує стандартні механізми для роботи зі складовими програмного забезпечення. У наступному списку перераховані деякі конкретні переваги, які забезпечує технологія Java для розробника компонентів:

  • Бін отримує всі переваги парадигми "Написати один раз, пробіжись кудись" на Java.
  • Властивості, події та методи Bean, які піддаються впливу інструменту для створення програм, можна контролювати.
  • Бін може бути розроблений для правильної роботи в різних регіонах, що робить його корисним на світових ринках.
  • Може бути надано допоміжне програмне забезпечення, яке допоможе людині налаштувати Bean. Це програмне забезпечення потрібне лише тоді, коли встановлюються параметри часу проектування для цього компонента. Його не потрібно включати в середовище виконання.
  • Параметри конфігурації Bean можна зберегти в постійному сховищі та відновити згодом.
  • Бін може зареєструватися для отримання подій від інших об'єктів і може генерувати події, які надсилаються іншим об'єктам.

Ось простий приклад Javabean:

public class MyBean implements java.io.Serializable
{

       protected  int theValue;

       public MyBean()
       {
       }

       public void setMyValue(int newValue)
       {
           theValue = newValue;
       }

      public int getMyValue()
      {
           return theValue;
      }

}

Це справжній Bean з назвою MyBean, який має стан (змінна theValue), який автоматично зберігатиметься та відновлюється механізмом стійкості JavaBeans, і він має властивість з назвою MyValue, яка може бути використана візуальним середовищем програмування. Цей Бін не має візуального зображення, але це не є вимогою для компонента JavaBean.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.