Места, где используются JavaBeans? - PullRequest
160 голосов
/ 13 ноября 2009

Что такое JavaBean и зачем он мне нужен? Так как я могу создавать все приложения с классом и структурой интерфейса? Зачем мне бобы? И можете ли вы привести несколько примеров, в которых бины необходимы вместо классов и интерфейсов?

Пожалуйста, объясните сущность боба в следующем контексте:

  • Приложения для Wep
  • Автономные приложения

Ответы [ 4 ]

163 голосов
/ 13 ноября 2009

Они часто просто представляют данные реального мира. Вот простой пример 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;

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

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>

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

Смотри также:

58 голосов
/ 13 ноября 2009

Фасоль сами

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

  • Они хорошо сериализуются.
  • Может быть создан с использованием отражения.
  • В противном случае можно очень легко управлять с помощью отражения.
  • Хорошо подходит для инкапсуляции фактических данных из бизнес-кода.
  • Общие соглашения означают, что каждый может использовать ваши бобы, И ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ВСЕ КАЖДЫЕ БОЛЬШЕ ЕЩЕ, без какой-либо документации / руководства, легко и согласованно.
  • Очень близко к POJO s, что фактически означает еще большую совместимость между различными частями системы.

Также есть, конечно, Enterprise JavaBeans , которые являются совершенно другим вопросом и не должны смешиваться с простыми JavaBeans. Я просто хотел упомянуть EJB: s, потому что имена похожи, и эти два легко перепутать.

Beans в веб-приложениях

Если вы рассматриваете «нормальные» JavaBeans в контексте веб-приложения, они имеют больше смысла, чем носить обувь на ногах. Поскольку спецификация Servlet требует, чтобы сеансы были сериализуемыми, это означает, что вы должны хранить свои данные в сеансе как нечто сериализуемое - почему бы тогда не сделать его бином! Просто добавьте ваш SomeBusinessDataBean в сеанс, и все готово, смехотворно просто, соответствует спецификациям и удобно.

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

Бобы в автономных приложениях

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

48 голосов
/ 13 ноября 2009

Боб на самом деле ничего особенного.Чтобы класс был «bean-компонентом», все, что ему требуется, это:

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

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

Более подробную информацию вы можете найти непосредственно в Sun здесь .

15 голосов
/ 04 февраля 2013

Java Bean - это программный компонент, разработанный для многократного использования в различных средах. Нет никаких ограничений на возможности Бина. Он может выполнять простую функцию, такую ​​как проверка правописания документа, или сложную функцию, такую ​​как прогнозирование портфеля акций. Бин может быть виден конечному пользователю. Одним из примеров этого является кнопка на графическом интерфейсе пользователя. Бин также может быть невидимым для пользователя. Программное обеспечение для декодирования потока мультимедийной информации в режиме реального времени является примером такого типа строительного блока. Наконец, Bean-компонент может быть разработан для автономной работы на рабочей станции пользователя или для совместной работы с набором других распределенных компонентов. Программное обеспечение для генерации круговой диаграммы из набора точек данных является примером Бина, который может выполняться локально. Однако Бин, который предоставляет информацию о ценах в реальном времени с биржи или товарной биржи, должен работать в сотрудничестве с другим распределенным программным обеспечением для получения своих данных.

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

Преимущества Java Beans

Архитектура компонента программного обеспечения обеспечивает стандартные механизмы для работы со строительными блоками программного обеспечения. В следующем списке перечислены некоторые конкретные преимущества, предоставляемые технологией Java для разработчика компонента:

  • Бин получает все преимущества парадигмы Java "однократная запись и запуск в любом месте".
  • Свойства, события и методы Бина, предоставляемые приложению Инструмент строителя можно контролировать.
  • Бин может быть разработан для правильной работы в разных регионах, что делает его полезно на мировых рынках.
  • Может быть предоставлено вспомогательное программное обеспечение, чтобы помочь человеку настроить Бин. Это программное обеспечение требуется только при настройке параметров времени разработки для этого компонента. Это не нужно включать в среду выполнения.
  • Параметры конфигурации Бина могут быть сохранены в постоянном хранилище и восстановлены позже.
  • Бин может регистрироваться для получения событий от других объектов и может генерировать события, которые отправляются на другие объекты.

Вот простой пример 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;
      }

}

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

...