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

Самые важные ловушки для начала разработчиков должны избежать беспорядка между C и C++. C++ никогда нельзя рассматривать как простое лучше C или C с классами, потому что это сокращает его питание и может сделать его даже опасным (особенно при использовании памяти в качестве в C).

167
задан T Zengerink 18 September 2015 в 11:04
поделиться

3 ответа

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

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

См. также:

171
ответ дан 23 November 2019 в 21:00
поделиться

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

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

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

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

50
ответ дан 23 November 2019 в 21:00
поделиться

Сами бины

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

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

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

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

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

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

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

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

60
ответ дан 23 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: