Fasulye , özellikler , yöntemler ve etkinlikler için Java Bean yönergelerine (tasarım desenleri de denir) uyan yöntem adlarına sahip bir Java sınıfıdır. Dolayısıyla, fasulye sınıfının bir özellik tanımının parçası olmayan herhangi bir genel yöntemi bir fasulye yöntemidir. En azından, tek üye olarak bir özelliğe sahip bir Java sınıfı (elbette, ortak alıcı ve ayarlayıcıya eşlik etmek gerekir), tek üye olarak genel bir yöntem veya sadece bir genel olay dinleyicisi kayıt yöntemi bir Java fasulyesidir. Ayrıca, özellik salt okunur özellik (alıcı yöntemine sahip, ancak ayarlayıcı içermiyor) veya salt yazılır özellik (yalnızca ayarlayıcı yöntemine sahip olabilir) olabilir. Herhangi bir beanbox aracı veya kabı tarafından görülebilmesi için Java fasulyesinin genel bir sınıf olması gerekir. Kap, somutlaştırabilmelidir; bu yüzden de bir kamu kurucusu olması gerekir. JavaBeans şartnamebir kabın, bir kabın somutlaştırması için açık veya varsayılan bir genel sıfır değişkenli yapıcıya sahip olmasını gerektirmez. Serileştirilmiş bir örnek içeren bir dosya (.ser uzantılı) sağlayabilirseniz, bir beanbox aracı bu dosyayı bir prototip çekirdeği oluşturmak için kullanabilir. Aksi takdirde, çekirdeğin açık veya varsayılan bir genel sıfır değişken yapıcısı olmalıdır.
Fasulye somutlaştırıldıktan sonra, Java Bean API'sı (java.beans. *) İntrospect edebilir ve üzerindeki yöntemleri çağırabilir. BeanInfo arabirimini uygulayan veya bir BeanInfo uygulamasını genişleten bir sınıf yoksa, SimpleBeanInfo sınıfı, içgözlem, bir hedef çekirdeği tarafından desteklenen yöntemleri incelemek ve daha sonra çıkarmak için basit tasarım desenleri (yönergeler) uygulamak için yansıma (örtük içgözleme) kullanılmasını içerir. özellikleri, olayları ve genel yöntemleri destekleyen yöntemler. BeanInfo arabirimini uygulayan bir sınıf (bir fasulye Foo için FooBeanInfo olarak adlandırılmalıdır) varsa, API örtük içgözlemi atlar ve bu sınıfın genel yöntemlerini (getPropertyDescriptor (), getMethodDescriptors (), getEventSetDescriptors ()) bilgi. SimpleBeanInfo'yu genişleten bir sınıf mevcutsa, SimpleBeanInfo genel yöntemlerinden hangisinin geçersiz kılındığına bağlı olarak (getPropertyDescriptor (), getMethodDescriptors (), getEventSetDescriptors ()), bilgi almak için bu geçersiz kılınan yöntem (ler) i kullanır; geçersiz kılınmayan bir yöntem için, varsayılan olarak karşılık gelen örtük içgözlem için kullanılır. Fasulye, üzerinde örtük bir içgözlem olmasa bile, yine de somutlaştırılmalıdır. Böylece, bir kamu zeri-args yapıcısının gerekliliği. Ancak, elbette, Seri hale getirilebilir veya Dışsallaştırılabilir arayüz tanınması için gerekli değildir. Bununla birlikte, Java Bean spesifikasyonu, 'Sadece kendi iç durumunu kaydetmek isteyen ve bunu düşünmek istemeyen küçük bir Bean'in genel durumu için “önemsiz” olmasını isteriz. Bu nedenle, tüm fasulye Serileştirilebilir veya Dışsallaştırılabilir arabirim uygulamalıdır. Genel olarak, JavaBeans spesifikasyonu bir fasulyeyi neyin oluşturduğu konusunda zor ve hızlı değildir. "JavaBeans bileşenlerini yazmak şaşırtıcı derecede kolaydır. Özel bir araca ihtiyacınız yoktur ve herhangi bir arabirim uygulamak zorunda değilsiniz. Fasulye yazmak sadece belirli kodlama kurallarına uyma meselesidir. Tek yapmanız gereken sınıfınıza benzetmek bir fasulye - fasulye kullanan araçlar fasulyenizi tanıyabilecek ve kullanabilecektir. " Önemsiz olarak, aşağıdaki sınıf bile bir Java Bean,
public class Trivial implements java.io.Serializable {}
Diyelim ki, bir fasulye yapıcısının bazı parametreleri var. Bazılarının basit türler olduğunu varsayalım. Kapsayıcı onlara hangi değerlerin atanacağını bilemeyebilir; olsa bile, ortaya çıkan örnek yeniden kullanılamayabilir. Yalnızca kullanıcı, Bahar fasulyelerinde olduğu gibi söz açıklamaları veya xml yapılandırma dosyaları ile yapılandırabilirse (değerleri belirleyebilirse) mantıklı olabilir. Ve bazı parametrelerin sınıf veya arayüz tipleri olduğunu varsayalım. Yine, kap kendisine hangi değerlerin atanacağını bilemeyebilir. Yalnızca kullanıcı sözlü ek açıklamalar veya xml yapılandırma dosyalarıyla yapılandırabilirse (belirli nesneleri belirleyebilirse) mantıklı olabilir. Ancak, Spring'de bile (xml yapılandırma dosyaları aracılığıyla), yapıcı argümanlarına (yapıcı argümanlarının özniteliği veya öğesi) belirli nesneler (dize adları ile) atamak tipik değildir; temel olarak kaynak enjeksiyonu gibidir. Diğer Bahar çekirdeklerine (işbirlikçi denir; bir yapıcı argüman öğesindeki öğe yoluyla) atıfta bulunmak temel olarak bağımlılık enjeksiyonudur ve bu nedenle tipiktir. Açıkçası, bir bağımlılığın (ortak çalışan fasulye) enjekte edilmiş parametrelere sahip bir kurucu olabilir; enjekte edilen bağımlılık (lar) ın parametreleri ve benzerleri olan bir yapıcısı olabilir. Bu senaryoda, nihayetinde, diğer işbirlikçi çekirdekleri yapıcılara bağımlı enjeksiyon yoluyla inşa etmeden önce kabın sadece yeni MyBean () çağırarak başlatabileceği bazı fasulye sınıflarına (örneğin, MyBean.class) ihtiyacınız olacak - böylece, fasulye kamu sıfır-args yapıcı olması. Bir kapsayıcı bağımlılık enjeksiyonunu desteklemiyorsa ve / veya Spring'deki gibi bazı ek açıklamalar veya xml yapılandırma dosyaları aracılığıyla kurucuya basit tür değerlerin atanmasına izin vermiyorsa, fasulye yapıcılarının parametreleri olmamalıdır. Bir Bahar fasulyesi uygulaması bile, genel sıfır değişkenli kurucuya sahip olmak için bazı fasulyeye ihtiyaç duyacaktır (örneğin, Bahar uygulamanızın kurucu argümanları olarak sadece basit tipte fasulyeye sahip olmadığı bir senaryoda).
JSF yönetilen fasulye bir web kapsayıcısında çalıştırın. @ManagedBean ek açıklamasıyla veya yönetilen bean.xml uygulama yapılandırma kaynak dosyasıyla yapılandırılabilirler. Bununla birlikte, sadece kaynak enjeksiyonu yoluyla (tipik değil) enjeksiyonu destekler; yapıcılara enjeksiyon için uygun değildir. MTU specyönetilen çekirdeklerin genel sıfır argüman kurucularına sahip olmasını gerektirir. Ayrıca, “Bu tarifnamenin 2.3 sürümünden itibaren, bu bölümde belirtilen yönetilen fasulye tesisinin kullanılması kesinlikle önerilmez. Aynı sorunu çözmek için daha iyi ve daha uyumlu bir şekilde entegre edilmiş bir çözüm, JSR-365'te belirtildiği gibi Bağlamlar ve Bağımlılık Enjeksiyonu (CDI) kullanmaktır. "Başka bir deyişle, benzer yapıcılara tipesafe bağımlılık enjeksiyonu sunan CDI tarafından yönetilen fasulye kullanılacak. CDI şartnamesi, sadece web katmanı için değil, JEE platformunun tüm kapları için geçerli olan Yönetilen Fasulye şartnamesini benimser.Bu nedenle, web kapsayıcısının CDI şartnamesini uygulaması gerekir.
İşte Yönetilen Fasulye spesifikasyonundan bir alıntı
“Yönetilen Fasulye, aksi takdirde“ POJO'lar ”(Düz Eski Java Nesneleri) kısaltması altında bilinen, minimum gereksinimleri olan kapsayıcı tarafından yönetilen nesnelerdir ... Java SE platformunda bulunan JavaBeans bileşen modelinin Java EE platformu gelişmiş bir sürümü olarak görülebilirler .... Managed Beans'ın JavaServer Faces (JSF) teknolojisinde bulunan homonymous tesisinde bir öncüye sahip olması okuyucu tarafından kaçırılmayacaktır… Bu spesifikasyonda tanımlanan Managed Beans, JSF'de bulunanların genellemesini temsil eder; özellikle, Yönetilen Fasulye, yalnızca web modüllerinde değil, bir Java EE uygulamasında herhangi bir yerde kullanılabilir. Örneğin, temel bileşen modelinde, Yönetilen Fasulye bağımsız değişken oluşturucu değil, ancak CDI (JSR-299) gibi Yönetilen Fasulye üzerine inşa edilen bir belirtim sağlamalıdır, bu gereksinimi gevşetebilir ve Yönetilen Fasulye'nin, iyi tanımlanmış bazı kurallara uydukları sürece inşaatçılara daha karmaşık imzalar sunmasına izin verebilir ... Yönetilen Fasulye olmamalıdır: bir son sınıf, soyut bir sınıf, statik olmayan bir iç sınıf . Yönetilen Fasulye, normal bir JavaBean bileşeninden farklı olarak serileştirilemeyebilir. ” Böylece, başka şekilde POJO veya POJO çekirdekleri olarak bilinen, Yönetilen Fasulye spesifikasyonu CDI'da olduğu gibi uzatmaya izin verir.
CDI özellikleri yönetilen çekirdekleri şu şekilde yeniden tanımlar: Java EE'de çalışırken, üst düzey bir Java sınıfı gereksinimleri karşıladığında yönetilen bir çekirdektir:
• Bir iç sınıf değildir. • Soyut olmayan bir sınıftır veya @Decorator'a not eklenmiştir. • javax.enterprise.inject.spi.Extension uygulamıyor. • @Vetoed veya açıklamalı @Vetoed paketinde açıklanmaz. • Uygun bir kurucuya sahiptir: sınıfta parametresiz bir kurucu vardır veya sınıf, @Inject ek açıklamalı bir kurucu bildirir.
Bu koşulları karşılayan tüm Java sınıfları yönetilen çekirdeklerdir ve bu nedenle yönetilen bir çekirdeği tanımlamak için özel bir bildirim gerekmez. Veya
herhangi bir Java EE spesifikasyonu tarafından yönetilen bir fasulye olarak tanımlanmışsa ve
• EJB bileşeni tanımlayan bir ek açıklama ile açıklanmaz veya ejb-jar.xml dosyasında EJB fasulye sınıfı olarak bildirilmez.
Bahar çekirdeklerinden farklı olarak, Spring gibi xml yapılandırma dosyaları veya herhangi bir ek açıklama ile yapılandırmayı destekliyorsa mümkün olabilecek basit türlere sahip yapıcıları desteklemez.
EJB'ler bir EJB kapsayıcısında çalışır. Onun şartnamediyor ki: “Bir oturum fasulyesi bileşeni bir Yönetilen Fasulye.” “Sınıfta argüman almayan bir kamu kurucusu olması gerekir” diyor hem oturum fasulyesi hem de mesaj odaklı fasulye için. Ayrıca, “Oturum fasulyesi sınıfı SessionBean arabirimini veya Serializable arabirimini uygulamak için gerekli değildir. ” JSF fasulyeleriyle aynı nedenden ötürü, EJB3 bağımlılık enjeksiyonunun temelde kaynak enjeksiyonu olması, JSF fasulyeleri argümanları olan yapıcıları, yani bağımlılık enjeksiyonu yoluyla desteklemez.Ancak, EJB kabı CDI uygularsa, “İsteğe bağlı olarak: Inject ek açıklaması ile açıklamalı ek kurucu, “hem oturum fasulyesi hem de mesaj güdümlü fasulye için diyor,” “CDI fasulye arşivine paketlenmiş ve javax.enterprise.inject.Vetoed ek açıklama ile paketlenmemiş bir EJB, CDI etkin fasulye."