簡體   English   中英

使用Java Bean有什么好處?

[英]What is the advantage of using Java Beans?

我相信我理解Java Beans是什么:包含no-arg構造函數的Java類是可序列化的,並使用getter和setter公開它們的字段。

  1. Java Bean是否必須公開其所有字段才能獲得bean的資格? 如果不是,它甚至不得暴露任何

  2. May Java Beans是否包含帶參數的構造函數以及無參數構造函數?

  3. Java Bean的目的是什么,除了符合某種編碼風格? 似乎有很多關於“豆子這個”或“豆子”的討論,但我不知道為什么它們是有利的,特別是。

我完全可以制作no-arg構造函數。 可能有很多原因,如果無參數構造函數幫助編譯器進行一些優化,我也不會感到驚訝。 我也可以理解讓你的課程可序列化。 即使該類從未被序列化,也可能是,並且回溯可能會令人討厭(或者在黑盒子庫中不可能)。

但最令人好奇的是要求所有字段都可以通過getter和setter訪問。 當我需要它時,我確實在我自己的工作中使用它們,但Java Beans需要它們(可能所有這些,取決於我對#1的回答)似乎很奇怪。 如果它是反射的問題,那么反射是否也不容易得到字段? 如果這不僅僅是設置值的問題,那么如果方法存在,反射是否不能在字段上使用getter / setter?

JavaBean本身並不十分有趣,它只是一個符合上面列出的標准的Java類。 但是,符合此標准是Java EE框架構建的支柱之一,它出現在很多地方。 我懷疑當你聽說JavaBeans可以做的所有偉大事情時,Enterprise JavaBeans(EJB)中提到了什么。 僅供參考,下面列出了幾種不同類型的EJB:

  1. 實體豆
  2. 有狀態會話豆
  3. 無狀態會話豆

現在有一些細節......

實體豆

您可能希望從底層數據庫讀取/寫入對象。 您可以使用JDBC / SQL來執行此操作,但您也可以使用持久性框架。 Java EE規范包含一個持久性規范,您可以將該類聲明為“實體bean”,並讓Java自動生成數據庫表和邏輯,以便在數據庫中的條目和程序中的對象之間進行映射。 最初,持久性需要使用Application Server(例如Glassfish,JBoss,Geronimo等),但AFAIK,您可以在沒有服務器組件的桌面應用程序中使用它。 實際的實現由較低級別的庫提供,例如Eclipselink,Toplink,Hibernate等,但Java API抽象出它們之間的任何差異。

有狀態會話豆

想象一下,您想要創建一個存在於單獨JVM上的Java類實例。 JVM可能在同一台物理計算機上運行,​​但同樣可能在通過網絡進行通信的不同計算機上運行。 使用Java EE應用程序服務器,您可以創建一個可以由應用程序服務器的客戶端實例化的類。 這些客戶端可以實例化一個類似於普通對象的類,但是在對象上調用的任何方法都會在服務器上執行,並將結果傳遞回調用者。 它基本上是一種面向對象的遠程過程調用形式。

無狀態會話豆

這是有狀態會話bean的一個小變化。 對於有狀態bean,如果服務器有1000個客戶端,那么它可能必須創建1000個bean實例並記住哪個實例屬於哪個客戶端。 對於無狀態bean,服務器創建一個bean池,並且不記得哪個客戶端擁有哪個bean。 當客戶端調用方法時,服務器從池中選擇一個bean並使用它,在完成時將其返回到池中。 當您希望服務器記住有關每個客戶端的詳細信息時,可以使用有狀態會話Bean,當您不需要記住客戶端特定的詳細信息時,將使用無狀態Bean。 請注意,無狀態bean可能具有狀態,只是該狀態對客戶端不感興趣。

他們遵守明確的規范

多虧了這一點,有很多工具可以簡化Javabeans的工作(或者反之亦然)。 有些工具可以根據某種風格( XMLJSONCSVDDL等)中的某些數據自動生成它們,反之亦然,也可以像Commons BeanUtilsDozerEZMorph等那樣讀取/操作/映射它們。 。 此外,還有很多MVC / ORM框架可以與Javabeans一起使用,比如JPAHibernateJSFSpring等。甚至像Eclipse這樣有點像IDE也知道如何基於某些字段自動生成Javabeans。

它是Javabeans周圍的工具和框架,使我們的生活更輕松。 Javabeans規范使這些東西存在。

最重要的是,Java Bean是一個可重用的軟件組件

這意味着它沒有與其他組件緊密耦合。 如果您的Java類創建另一個類的實例,或者返回一些特定的實現類,則它不再是bean。 Bean覆蓋了一些明確定義的功能,並且與其他類松散耦合。

這樣做的好處是,你可以獲得所有這些小件,然后你可以很容易地一起工作。 此外,這些易於重復使用和單元測試。

即使您沒有使用某些可視化環境來耦合bean(如bean規范所示),這仍然是使用bean的原因:獲取易於使用的小塊代碼。

如果您不使用可視化工具,那么您的bean具有0參數構造函數或可序列化並不重要。

1)豆類與平台無關,這意味着它可以在任何地方運行。

2)它可以在任何語言環境中運行,並在自然界中分發。

3)可以控制豆類的方法,性質和事件。

4)配置Java bean很容易。

5)bean可以接收和創建事件。

6)bean的配置設置可以持久存儲,並且可以隨時檢索。

最大的優點是您的bean是根據規范構建的,可以直接與“bean兼容”庫和框架一起使用。

例如,大多數序列化框架(XML,JSON,YAML,...)通常可以直接使用bean而無需配置。

我認為bean的最大優點是可以以單個對象的形式傳遞數據(或多或少)。 在方法的定義中不需要創建很多參數,而是可以使用bean代替並直接以對象的形式傳遞數據。 它提供了更好的程序架構......這就是我的想法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM