สถานที่ที่ใช้ JavaBeans?


172

JavaBean คืออะไรและทำไมฉันต้องใช้ ฉันสามารถสร้างแอพทั้งหมดด้วยโครงสร้างคลาสและส่วนต่อประสานได้อย่างไร ทำไมฉันต้องการถั่ว และคุณสามารถให้ฉันตัวอย่างที่ถั่วมีความสำคัญแทนการเรียนและส่วนต่อประสาน

โปรดอธิบายความจำเป็นของถั่วในบริบทด้านล่าง:

  • แอพ Wep
  • แอพแบบสแตนด์อโลน

10
ฉันหวังว่าคุณจะไม่สับสนระหว่าง "Java beans" และ "Enterprise Java Beans หรือ EJBs"
ราหุล

53
ที่จริงฉันไม่ทราบเกี่ยวกับถั่วตัวเองแล้วว่าฉันสามารถสร้างความสับสนให้กับ EJB ..is มีอะไรพิเศษกับมัน ..
Sidharth

คำตอบ:


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 คุณสามารถใช้เพื่อถ่ายโอนข้อมูลจากฐานข้อมูลไปยัง UI:

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>

มันสมเหตุสมผลหรือไม่ คุณจะเห็นว่ามันเป็นชนิดของการประชุมซึ่งคุณสามารถใช้ทุกที่เพื่อการจัดเก็บ , การถ่ายโอนและการเข้าถึงข้อมูล

ดูสิ่งนี้ด้วย:


11
คำอธิบายที่ดีและโดยทั่วไปแล้วสำหรับการใช้งาน Serializable นี้ไม่ได้บังคับ แต่มีประโยชน์มากหากคุณต้องการที่จะคงอยู่หรือถ่ายโอน Javabeans นอกหน่วยความจำของ Java เช่นในฮาร์ดดิสก์หรือผ่านเครือข่าย
agpt

แต่ใน 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 ไม่รู้หรือแม้แต่สนใจว่าข้อมูลมาจากไหน อย่างที่ควรจะเป็นและสามารถเปิดจดหมายอ่านสิ่งต่าง ๆ จากมันและทำสิ่งต่าง ๆ ตามข้อมูลนั้น

ถั่วในแอปพลิเคชันแบบสแตนด์อโลน

ที่จริงแล้วสิ่งที่นำไปใช้กับแอพแบบสแตนด์อโลนเช่นกันความแตกต่างเพียงอย่างเดียวคือคุณสามารถยุ่งกับ UI ได้มากขึ้นเนื่องจากแอปพลิเคชันแบบสแตนด์อโลนมีสถานะ UI: s ในขณะที่เว็บแอปพลิเคชันมี statelss UI: s ซึ่งในบางกรณี . เนื่องจากความแตกต่างนี้ทำให้ง่ายขึ้นที่จะยุ่งกับแอปพลิเคชันแบบสแตนด์อโลน แต่มันก็คุ้มค่ากับหัวข้ออื่นทั้งหมดและไม่เกี่ยวข้องโดยตรงกับ JavaBeans เลย


50

ถั่วไม่มีอะไรมากจริง ๆ เพื่อให้คลาสเป็น "bean" สิ่งที่ต้องมีคือ:

  • ที่จะมีสาธารณะไม่มีตัวสร้างข้อโต้แย้ง
  • ที่จะเป็นอนุกรม (เพื่อใช้อินเตอร์เฟซ Serializable โดยตรงหรือผ่านหนึ่งในซูเปอร์คลาสของมัน)

ในการนั้นคุณสามารถเพิ่ม getters และ setters สำหรับคุณสมบัติของคลาสที่สอดคล้องกับหลักการตั้งชื่อเฉพาะหากคุณต้องการให้ฟิลด์นั้นสามารถค้นพบได้ในบางสถานการณ์ (เช่นการทำให้คลาสนั้นวัตถุบางอย่างคุณสามารถลากแล้วปล่อยจากโปรแกรมแก้ไขภาพใน ตัวอย่างเช่น IDE)

ท่านสามารถหาข้อมูลเพิ่มเติมได้โดยตรงจากดวงอาทิตย์ที่นี่


15

Java Bean เป็นส่วนประกอบซอฟต์แวร์ที่ได้รับการออกแบบให้สามารถใช้ซ้ำได้ในสภาพแวดล้อมที่แตกต่างหลากหลาย ไม่มีการจำกัดความสามารถของ Bean มันอาจทำหน้าที่ง่าย ๆ เช่นตรวจสอบการสะกดคำของเอกสารหรือฟังก์ชั่นที่ซับซ้อนเช่นการคาดการณ์ประสิทธิภาพของพอร์ตการลงทุน ผู้ใช้ปลายทางอาจมองเห็น Bean ตัวอย่างหนึ่งคือปุ่มบนส่วนต่อประสานกราฟิกกับผู้ใช้ Bean อาจไม่ปรากฏแก่ผู้ใช้ ซอฟต์แวร์เพื่อถอดรหัสกระแสข้อมูลมัลติมีเดียแบบเรียลไทม์เป็นตัวอย่างของ Building Block ประเภทนี้ ในที่สุด Bean อาจได้รับการออกแบบให้ทำงานอัตโนมัติในเวิร์กสเตชันของผู้ใช้หรือทำงานร่วมกับชุดของส่วนประกอบอื่น ๆ ซอฟต์แวร์เพื่อสร้างแผนภูมิวงกลมจากชุดของจุดข้อมูลเป็นตัวอย่างของ Bean ที่สามารถดำเนินการภายใน อย่างไรก็ตาม

เราจะเห็นในไม่ช้าว่าการเปลี่ยนแปลงเฉพาะที่นักพัฒนาซอฟต์แวร์จะต้องทำในชั้นเรียนเพื่อให้สามารถใช้งานได้เหมือน Java Bean อย่างไรก็ตามหนึ่งในเป้าหมายของนักออกแบบ Java คือการทำให้การใช้เทคโนโลยีนี้เป็นเรื่องง่าย ดังนั้นการเปลี่ยนแปลงรหัสมีน้อยที่สุด

ข้อดีของ Java Beans

สถาปัตยกรรมองค์ประกอบซอฟต์แวร์ให้กลไกมาตรฐานในการจัดการกับหน่วยการสร้างซอฟต์แวร์ รายการต่อไปนี้ระบุถึงประโยชน์เฉพาะบางประการที่เทคโนโลยี Java มีให้สำหรับนักพัฒนาส่วนประกอบ:

  • A Bean ได้รับประโยชน์ทั้งหมดจากกระบวนทัศน์ "เขียนครั้งเดียวทำงานได้ทุกที่" ของ Java
  • คุณสมบัติเหตุการณ์และวิธีการของ Bean ที่สัมผัสกับเครื่องมือสร้างแอปพลิเคชันสามารถควบคุมได้
  • ถั่วอาจได้รับการออกแบบให้ทำงานอย่างถูกต้องในสถานที่ต่าง ๆ ซึ่งทำให้มีประโยชน์ในตลาดโลก
  • ซอฟต์แวร์เสริมสามารถให้เพื่อช่วยคนกำหนดค่า Bean ซอฟต์แวร์นี้จำเป็นเฉพาะเมื่อมีการตั้งค่าพารามิเตอร์ขณะออกแบบสำหรับส่วนประกอบนั้น ไม่จำเป็นต้องรวมอยู่ในสภาพแวดล้อมแบบรันไทม์
  • การตั้งค่าการกำหนดค่าของ Bean สามารถบันทึกในที่เก็บข้อมูลถาวรและเรียกคืนได้ในภายหลัง
  • Bean อาจลงทะเบียนเพื่อรับเหตุการณ์จากวัตถุอื่นและสามารถสร้างกิจกรรมที่ส่งไปยังวัตถุอื่น

นี่เป็นตัวอย่างง่ายๆของ 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;
      }

}

นี่คือ Bean จริงชื่อ MyBean ที่มีสถานะ (ตัวแปร theValue) ที่จะถูกบันทึกและกู้คืนโดยอัตโนมัติโดยกลไกการคงอยู่ของ JavaBeans และมีคุณสมบัติชื่อ MyValue ที่สามารถใช้งานได้โดยสภาพแวดล้อมการโปรแกรมแบบเห็นภาพ Bean นี้ไม่มีการแสดงภาพใด ๆ แต่นั่นไม่ใช่ข้อกำหนดสำหรับคอมโพเนนต์ JavaBean

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.