Những nơi JavaBeans được sử dụng?


172

JavaBean là gì và tại sao tôi cần nó? Vì tôi có thể tạo tất cả các ứng dụng với cấu trúc lớp và giao diện? Tại sao tôi cần đậu? Và bạn có thể cho tôi một số ví dụ trong đó đậu là thiết yếu thay vì các lớp và giao diện?

Vui lòng giải thích sự cần thiết của một hạt trong bối cảnh dưới đây:

  • Ứng dụng Wep
  • Ứng dụng độc lập

10
Tôi hy vọng bạn không nhầm lẫn giữa "đậu Java" và "Đậu Java doanh nghiệp hoặc EJB".
Raul

53
thực ra tôi không biết gì về đậu rồi, làm sao tôi có thể nhầm lẫn với EJB .. có gì đặc biệt với nó không ..
Sidharth

Câu trả lời:


178

Họ thường chỉ đại diện cho dữ liệu thế giới thực. Đây là một ví dụ đơn giản về 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);
    }
}

Việc triển khai Serializablekhông bắt buộc, nhưng rất hữu ích nếu bạn muốn có thể duy trì hoặc chuyển Javabeans bên ngoài bộ nhớ của Java, ví dụ như trong ổ cứng hoặc qua mạng.

Ví dụ, một lớp DAO, bạn có thể sử dụng nó để tạo danh sách người dùng trong đó bạn lưu trữ dữ liệu của userbảng trong cơ sở dữ liệu:

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;

Ví dụ, một lớp Servlet, bạn có thể sử dụng nó để chuyển dữ liệu từ cơ sở dữ liệu sang UI:

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

Ví dụ, một trang JSP bạn có thể truy cập nó bằng EL , theo các quy ước Javabean, để hiển thị dữ liệu:

<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>

Liệu nó có ý nghĩa? Bạn thấy đấy, đó là một quy ước mà bạn có thể sử dụng ở mọi nơi để lưu trữ , chuyểntruy cập dữ liệu.

Xem thêm:


11
Giải thích hay và thường cảm ơn vì việc triển khai tuần tự hóa này không bắt buộc, nhưng rất hữu ích nếu bạn muốn có thể duy trì hoặc chuyển Javabeans bên ngoài bộ nhớ của Java, ví dụ như trong ổ cứng hoặc qua mạng.
agpt

nhưng trong tài liệu java đề cập đến việc chúng ta nên triển khai Tuần tự hóa, vậy bạn có thể làm rõ không?
SSP

8
@SSP: 1) không có javadoc. 2) "nên"! = "Phải".
BalusC

61

Đậu

JavaBeans có ở khắp mọi nơi, chúng là một quy ước và chỉ có mỗi thư viện lớn hơn một chút ngoài kia sử dụng các quy ước đó để tự động hóa mọi thứ. Chỉ một vài lý do tại sao JavaBeans nên được sử dụng:

  • Họ nối tiếp độc đáo.
  • Có thể được khởi tạo bằng cách sử dụng sự phản chiếu.
  • Mặt khác có thể được kiểm soát bằng cách sử dụng sự phản chiếu rất dễ dàng.
  • Tốt cho việc đóng gói dữ liệu thực tế từ mã doanh nghiệp.
  • Các quy ước thông thường có nghĩa là bất kỳ ai cũng có thể sử dụng hạt của bạn VÀ BẠN CÓ THỂ SỬ DỤNG MỌI NGƯỜI BẮT ĐẦU mà không cần bất kỳ loại tài liệu / hướng dẫn sử dụng nào một cách dễ dàng và nhất quán.
  • Rất gần với POJO , điều này thực sự có nghĩa là khả năng tương tác nhiều hơn giữa các phần riêng biệt của hệ thống.

Ngoài ra, tất nhiên có Enterprise JavaBeans là một vấn đề hoàn toàn khác và không nên trộn lẫn với JavaBeans đơn giản. Tôi chỉ muốn đề cập đến EJB: s vì tên giống nhau và dễ khiến hai người đó nhầm lẫn.

Đậu trong các ứng dụng web

Nếu bạn xem xét JavaBeans "bình thường" trong ngữ cảnh ứng dụng web, chúng có ý nghĩa hơn là mang giày ở chân. Vì đặc tả Servlet yêu cầu các phiên phải được tuần tự hóa, điều đó có nghĩa là bạn nên lưu trữ dữ liệu của mình trong phiên dưới dạng một thứ gì đó có khả năng tuần tự hóa - tại sao không biến nó thành một bean sau đó! Chỉ cần ném someBusinessDataBean của bạn vào phiên và bạn sẽ thấy ổn, dễ cười, tuân thủ thông số kỹ thuật và thuận tiện.

Ngoài ra, việc truyền dữ liệu xung quanh ứng dụng cũng rất dễ dàng vì JavaBeans giúp bạn tách rời hoàn toàn các phần của ứng dụng. Hãy nghĩ JavaBeans như một lá thư và các hệ thống con khác nhau của ứng dụng như các phòng ban trong một tập đoàn rất lớn: Dept.A gửi một loạt dữ liệu tới Dept.B, Dept.B không biết - hoặc thậm chí quan tâm - dữ liệu đến từ đâu vì nó nên và chỉ có thể mở thư, đọc nội dung từ nó và thực hiện công việc của nó dựa trên dữ liệu đó.

Đậu trong các ứng dụng độc lập

Trên thực tế những gì ở trên cũng áp dụng cho các ứng dụng độc lập, điểm khác biệt duy nhất là bạn có thể gây rối với UI nhiều hơn một chút vì các ứng dụng độc lập có giao diện người dùng trạng thái: trong khi một số ứng dụng web chỉ mô phỏng UI: s trong một số trường hợp chỉ mô phỏng UI trạng thái: . Do sự khác biệt này, việc tạo ra một mớ hỗn độn với ứng dụng độc lập sẽ dễ dàng hơn nhưng nó hoàn toàn xứng đáng với một chủ đề khác và hoàn toàn không liên quan đến JavaBeans.


50

Một hạt đậu là không có gì nhiều, thực sự. Để một lớp học trở thành một "hạt đậu", tất cả những gì nó cần là:

  • để có một công khai, không có hàm tạo đối số
  • được tuần tự hóa (để thực hiện giao diện Nối tiếp, trực tiếp hoặc thông qua một trong các siêu lớp của nó).

Do đó, bạn có thể thêm getters và setters cho các thuộc tính của lớp phù hợp với quy ước đặt tên cụ thể nếu bạn muốn các trường có thể được khám phá trong một số trường hợp nhất định (ví dụ: tạo một số đối tượng mà bạn có thể kéo và thả từ trình soạn thảo trực quan trong IDE chẳng hạn).

Bạn có thể tìm thấy nhiều hơn trực tiếp từ Sun ở đây .


15

Java Bean là một thành phần phần mềm được thiết kế để có thể tái sử dụng trong nhiều môi trường khác nhau. Không có giới hạn về khả năng của Bean. Nó có thể thực hiện một chức năng đơn giản, chẳng hạn như kiểm tra chính tả của tài liệu hoặc chức năng phức tạp, chẳng hạn như dự báo hiệu suất của danh mục đầu tư chứng khoán. Bean có thể hiển thị cho người dùng cuối. Một ví dụ về điều này là một nút trên giao diện người dùng đồ họa. Bean cũng có thể vô hình với người dùng. Phần mềm để giải mã một luồng thông tin đa phương tiện trong thời gian thực là một ví dụ về loại khối xây dựng này. Cuối cùng, Bean có thể được thiết kế để hoạt động tự động trên máy trạm của người dùng hoặc hợp tác với một bộ các thành phần phân tán khác. Phần mềm tạo biểu đồ hình tròn từ một tập hợp các điểm dữ liệu là một ví dụ về Bean có thể thực thi cục bộ. Tuy nhiên,

Chúng ta sẽ sớm thấy những thay đổi cụ thể mà nhà phát triển phần mềm phải thực hiện đối với một lớp để nó có thể sử dụng được như một Java Bean. Tuy nhiên, một trong những mục tiêu của các nhà thiết kế Java là làm cho nó dễ sử dụng công nghệ này. Do đó, các thay đổi mã là tối thiểu.

Ưu điểm của đậu Java

Một kiến ​​trúc thành phần phần mềm cung cấp các cơ chế tiêu chuẩn để đối phó với các khối xây dựng phần mềm. Danh sách sau đây liệt kê một số lợi ích cụ thể mà công nghệ Java cung cấp cho nhà phát triển thành phần:

  • Bean nhận được tất cả các lợi ích của mô hình "viết một lần, chạy mọi nơi" của Java.
  • Các thuộc tính, sự kiện và phương thức của Bean được tiếp xúc với công cụ xây dựng ứng dụng có thể được kiểm soát.
  • Bean có thể được thiết kế để hoạt động chính xác ở các địa phương khác nhau, điều này làm cho nó hữu ích trong các thị trường toàn cầu.
  • Phần mềm phụ trợ có thể được cung cấp để giúp một người định cấu hình Bean. Phần mềm này chỉ cần thiết khi các tham số thời gian thiết kế cho thành phần đó đang được đặt. Nó không cần phải được đưa vào môi trường thời gian chạy.
  • Các cài đặt cấu hình của Bean có thể được lưu trong bộ lưu trữ liên tục và được khôi phục sau đó.
  • Bean có thể đăng ký để nhận các sự kiện từ các đối tượng khác và có thể tạo các sự kiện được gửi đến các đối tượng khác.

Đây là một ví dụ đơn giản về 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;
      }

}

Đây là một Bean thực sự có tên MyBean có trạng thái (biến sốValue) sẽ tự động được lưu và khôi phục bằng cơ chế lưu giữ JavaBeans và nó có một thuộc tính có tên MyValue có thể sử dụng được trong môi trường lập trình trực quan. Bean này không có bất kỳ biểu diễn trực quan nào, nhưng đó không phải là một yêu cầu đối với thành phần JavaBean.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.