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

172

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

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

  • Приложения для Wep
  • Автономные приложения
Sidharth
источник
10
Я надеюсь, что вы не путаете между "Java beans" и "Enterprise Java Beans или EJBs".
Рахул
53
на самом деле я не знаю о самом бобе, тогда как я могу перепутать с EJB .. есть ли что-то особенное с этим ..
Сидхарт

Ответы:

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>

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

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

BalusC
источник
11
Хорошее объяснение и, как правило, спасибо за это. Реализация Serializable не обязательна сама по себе, но очень полезна, если вы хотите сохранить или перенести Javabeans вне памяти Java, например, на жесткий диск или по сети.
Агпл
но в 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 не знает - или даже не заботится - откуда эти данные пришли как и должно быть, можно просто открыть письмо, прочесть что-то из него и сделать свое дело на основе этих данных.

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

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

Эско
источник
50

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

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

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

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

JRL
источник
15

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.

Вибха Санскритаян
источник