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

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

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

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

4 ответа

Решение

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

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

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

Сами бобы

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

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

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

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

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

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

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

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

Боб на самом деле ничего особенного. Для того, чтобы класс был "бином", все, что ему требуется, это:

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

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

Вы можете найти больше непосредственно от Солнца здесь.

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.

Другие вопросы по тегам