JavaBean ve POJO arasındaki fark nedir?


210

Aradaki farktan emin değilim. Hazırda Bekletme modunu kullanıyorum ve bazı kitaplarda JavaBean ve POJO'yu değiştirilebilir bir terim olarak kullanıyorum. Yalnızca Hazırda Bekletme bağlamında değil, genel kavramlar olarak da bir fark olup olmadığını bilmek istiyorum.

Yanıtlar:


252

Bir JavaBean belirli kuralları takip eder. Alıcı / ayarlayıcı adlandırma, varsayılan bir varsayılan oluşturucuya sahip olma, serileştirilebilir olma vb. Daha fazla bilgi için bkz. JavaBeans Kuralları .

Bir POJO (düz-eski-Java nesnesi) titizlikle tanımlanmamıştır. Belirli bir arabirimi uygulama veya belirli bir temel sınıftan türetme veya belirli bir çerçeveyle uyumlu olması için belirli ek açıklamaları kullanma gereği olmayan ve herhangi bir keyfi (genellikle nispeten basit) olabilecek bir Java nesnesidir. Java nesnesi.


41
Bir JavaBean'ın bir POJO olabileceğini ve genellikle bir POJO olabileceğini ve birçok POJO'nun aslında JavaBeans olduğunu unutmayın.
Joachim Sauer

8
Hayır, POJO'nun tanımı ile bir Java Bean bir POJO değildir , çünkü bir Java Bean olarak kabul edilmek için bir sınıfın belirli kodlama kurallarını izlemesi gerekir (örneğin, arg-no'lu bir kurucuya sahip değil, "get" ve / veya "set") veya bir BeanInfo sınıfıyla dağıtılabilir.
Nat

15
Bunlar konvansiyonlar olduğundan , bir fasulyenin POJO olabileceğini başarılı bir şekilde savunabileceğinizi düşünüyorum (örneğin, JavaBean arayüzünden veya benzeri bir şeyden miras almıyorsunuz)
Brian Agnew

1
JavaBeans spec bir "yeniden kullanılabilir yazılım bileşeni" (veya bazı) çok gevşek dışında bir JavaBean tanımlamak başarısız. No-arg yapıcısına sahip olmak zorunda değildir, "get" veya "set" ile başlayan yöntemlere ihtiyaç duymaz, seri hale getirilmesi gerekmez, hatta bir sınıf olması bile gerekmez.
Tom Hawtin - tackline

4
Matematiksel olarak, Javabeans'in bir POJO alt kümesi oluşturduğunu söyleyebiliriz, çünkü bir POJO'ya konan belirli kısıtlamalar onu bir Javabean yapar.
Nishit

106

Tüm JavaBeans POJO'dur, ancak tüm POJO'lar JavaBeans değildir.

JavaBean, belirli programlama kurallarını karşılayan bir Java nesnesidir:

  • JavaBean sınıfı Seri veya Harici olarak uygulanmalıdır;
  • JavaBean sınıfının ortak no-arg yapıcısı olmalıdır;
  • tüm JavaBean özellikleri genel ayarlayıcı ve alıcı yöntemlerine sahip olmalıdır (uygunsa);
  • tüm JavaBean örnek değişkenleri özel olmalıdır.

1
POJO'ların uygulayamayacağını düşündüm Serializable.
naXa

10
"JavaBean sınıfının arg-no yapıcısına sahip olmaması gerekir;" Burada herkese açık ekle
radistao

Bir JavaBean serileştirilebilir ve bu nedenle bir JavaBean POJO DEĞİLDİR.
karlihnos

25

Martin Fowler'e göre, bir POJO, İş Mantığı'nı kapsülleyen bir nesnedir (Fasulye (diğer cevaplarda zaten belirtilen tanım hariç), verileri tutmak için bir konteynırdan çok daha fazlasıdır ve nesne üzerinde mevcut işlemler sadece veri alır ve alır.

Terim Rebecca Parsons, Josh MacKenzie ve ben Eylül 2000'de bir konferansta konuşmaya hazırlanırken ortaya çıktı. Konuşmada, işletme mantığını Entity Beans kullanmak yerine normal java nesnelerine kodlamanın birçok faydasına işaret ediyorduk. İnsanların sistemlerinde normal nesneleri kullanmaya karşı niye bu kadar karşılandıklarını merak ettik ve bunun basit nesnelerin süslü bir adı olmadığı için olduğu sonucuna vardık. Bu yüzden onlara bir tane verdik ve çok güzel bir şekilde yakalandı.

http://www.martinfowler.com/bliki/POJO.html


7

POJO: Sınıf, temel JDK ile yürütülebiliyorsa, başka herhangi bir harici üçüncü taraf kitaplığı desteği olmadan POJO adı verilir

JavaBean: Sınıf yalnızca erişenlerle (ayarlayıcılar ve alıcılar) javabeans olarak adlandırılan öznitelikler içeriyorsa, Java çekirdekleri genellikle herhangi bir veri mantığı içermez, bunun yerine bazı verileri tutmak için kullanılır.

Tüm Javabeans POJO'dur, ancak tüm POJO Javabeans değildir


7

Pojo - Düz eski java nesnesi

pojo sınıfı herhangi bir uzmanlık olmadan sıradan bir sınıftır, sınıf tamamen teknoloji / çerçeveden birleşti. sınıf teknoloji / çerçeveden uygulanmaz ve sınıfın pojo sınıfı olarak adlandırıldığı teknoloji / çerçeve api'sinden uzanmaz.

pojo sınıfı arabirimleri uygulayabilir ve sınıfları genişletebilir ancak süper sınıf veya arabirim bir teknoloji / çerçeve olmamalıdır.

Örnekler:

1.

class ABC{
----
}

ABC sınıfı, teknolojiyi / çerçeveyi uygulamayan veya genişletmeyen, bu yüzden bu pojo sınıfıdır.

2.

class ABC extends HttpServlet{
---
}

Servlet teknolojisi api'sinden uzanan ABC sınıfı bu yüzden bu bir pojo sınıfı değildir.

3.

class ABC implements java.rmi.Remote{
----
}

ABC sınıfı rmi api'den uygular, bu yüzden bu bir pojo sınıfı değildir.

4.

class ABC implements java.io.Serializable{
---
}

Bu arayüz java dilinin bir parçası değil teknolojinin / çerçevenin bir parçası değil, bu yüzden bu pojo sınıfı.

5.

class ABC extends Thread{
--
}

burada iş parçacığı da java dil sınıfı bu yüzden bu da bir pojo sınıfı.

6.

class ABC extends Test{
--
}

Test sınıfı teknolojiler / çerçeveyi genişletir veya uygularsa ABC aynı zamanda bir pojo sınıfı değildir, çünkü Test sınıfının özelliklerini devralır. Test sınıfı bir pojo sınıfı değilse ABC sınıfı da bir pojo sınıfı değildir.

7.

şimdi bu nokta olağanüstü bir durum

@Entity
class ABC{
--
}

@Entityhazırda bekletme api veya jpa api tarafından verilen bir ek açıklamadır, ancak yine de bu sınıfı pojo sınıfı olarak adlandırabiliriz. teknoloji / çerçeveden verilen ek açıklamalara sahip sınıfa bu istisnai durumda pojo sınıfı denir.


2

Java çekirdekleri özel tip POJO'lardır.

Aşağıda gerekçeli olarak listelenen spesiyaliteler

resim açıklamasını buraya girin


1

POJOSbelirli sözleşmelerle (getter / setter, genel no-arg yapıcısı, özel değişkenler) ve eylemde (ör. verileri forma göre okumak için kullanılıyor) vardır JAVABEANS.


1

Özetle: benzerlikler ve farklılıklar:

   java beans:                          Pojo:
-must extends serializable              -no need to extends or implement.
 or externalizable.                     
-must have public class .               - must have public class
-must have private instance variables.      -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor.           - can have constructor with agruments.

Tüm JAVA Fasulyeleri POJO'dur, ancak tüm POJO'lar JAVA Fasulyesi değildir.


0

Yukarıdaki resmi tanımları gördünüz, çünkü bunların hepsi değerlidir.

Ama tanımlara fazla takılma. Sadece daha bakalım anlamda burada şeylerin.

JavaBeans, kullanıcıların verilere ve / veya uygulama koduna uzaktan, yani bir ağ üzerinden bir sunucudan (web veya özel ağ aracılığıyla) eriştiği Kurumsal Java uygulamalarında kullanılır. Dolayısıyla, söz konusu veriler kullanıcıların bilgisayarlarının içine veya dışına seri biçimde aktarılmalıdır; bu nedenle, Java EE nesnelerinin Serializable arabirimini uygulaması gerekir. JavaBean'ın doğasının bu kadarı, verileri bir dosya sisteminden okunan veya bir dosya sistemine yazılan Java SE uygulama nesnelerinden farklı değildir. Java sınıflarını bir dizi kullanıcı makinesi / işletim sistemi kombinasyonundan bir ağ üzerinden güvenilir bir şekilde kullanmak, bunların işlenmesi için kuralların kabul edilmesini de gerektirir. Bu nedenle, bu sınıfları özel nitelikler, bağımsız değişken oluşturucu ve standartlaştırılmış alıcılar ve ayarlayıcılar ile herkese açık olarak uygulama gereksinimi.

Java EE uygulamaları, JavaBeans olarak uygulananlar dışındaki sınıfları da kullanır. Bunlar giriş verilerinin işlenmesinde veya çıkış verilerinin düzenlenmesinde kullanılabilir, ancak bir ağ üzerinden aktarılan nesneler için kullanılmaz. Bu nedenle, yukarıdaki hususların Java nesneleri olarak geçerli olmaları çubuğuna uygulanması gerekmez. Bu son sınıflara POJO'lar - Düz Eski Java Nesneleri denir.

Sonuç olarak, Java Beans'ı sadece bir ağ üzerinde kullanılmak üzere uyarlanmış Java nesneleri olarak görebilirsiniz.

1995'ten beri yazılım dünyasında çok fazla hype var - ve az miktarda humbug yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.