2009-01-14 16 views
16

BeanFactory numaralı telefondan getBean(name) numaralı telefonu aradığımda, uygulama bağlamında tanımlı bir fasulye örneğini geri alıyorum. Bununla birlikte, getBean(name)'u tekrar çağırdığımda (aynı adla), fasülyenin aynı örneğini alıyorum. Bazı (birçok?) Durumda bu durumun nasıl isteneceğini anlıyorum ama BeanFactory bana yeni bir örnek vermesini nasıl söyleyebilirim?Bir yay kabını tek bir fasulye örneğini döndürmemeye nasıl zorlarım?

Örnek Bahar yapılandırma (tersely ... Bir ayrıntı dışarı bıraktım ama bu noktaya erişebilmek olmalı): Ben bu çalıştırdığınızda

for(int i = 0;i++;i<=1) { 
    ApplicationContext context = ClassPathXmlApplicationContext("context.xml"); 
    Object o = context.getBean("beanA"); 

    System.out.println(o.toString()); // Note: misc.BeanA does not implement 
             // toString(), so this will display the OOID 
             // so that we can tell if it's the same 
             // instance 
} 

:

<beans> 
    <bean id="beanA" class="misc.BeanClass"/> 
</beans> 

Örnek Java Ben böyle bir şey olsun: her ikisi de aynı Ooid sahip olduğunu

[email protected] 
[email protected] 

Not ... bu yüzden bu aynı örnekleri vardır ... ama farklı örnekler istedi.

cevap

33

Sen bir prototip fasulye yerine tekil fasulye

<bean id="beanA" class="misc.BeanClass" scope="prototype"/> 

Bu, her isteği ile yeni bir örneğini alacak istediğiniz yayı anlatmalıyız. Doc bağlantı için

+0

Bunu yaptı. İki şey beni raydan çıkardı: 1. Başlangıçta, konfigürasyondaki bir özellik yerine getBean (String) için bir argüman arıyordum ... 2. İlkbahar 1.x'de (önceki bahar deneyimim) öznitelik çağrıldı. singleton ', ama görünüşe göre 2.5 değil. – Jared

+0

Evet, isteği, oturumu ve genel oturumu karşılamak için Spring 2.x'te "kapsam" olarak değiştirdiler. – duffymo

+0

Java sınıfı ('@ Yapılandırma ') üzerinden konfigürasyon yapıyorsanız, fasulye tanımlama yönteminde @Scope (" prototip ")' i kullanabilirsiniz. –

14

Varsayılan olarak scope tekildir, ancak prototip, istek, oturum veya genel oturuma ayarlayabilirsiniz.

+1

+1. Teşekkürler. – Jared

İlgili konular