2011-08-10 17 views
16

her arama için bir sonraki durum fasulye yeni bir örneğini oluşturun: Connection manager her seferinde biri ConnectionServer nesne ve So DataBean yeni nesneler olmalıdır, ben bu fasulye oluşturulan ve bahar xml dışarı yapılandırmış .Bahar: Ben elde etme yöntemiyle

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <bean id="dataBena" class="com.test.DataBean" scope="prototype"/> 
    <bean id="servCon" class="com.test.ServerCon"/> 
    <!--<bean id="test" class="com.test.Test"/>--> 
    <context:component-scan base-package="com.test"/> 
</beans> 

ve Bundan sonra G/bileşen sınıfının denilen Testi

@Component 
public class Test { 

    @Autowired 
    private DataBean bean; 
    @Autowired 
    private ServerCon server; 

    public DataBean getBean() { 
     return bean.clone(); 
    } 

    public ServerCon getServer() { 
     return server; 
    } 

} 

ANCAK, ben klonlama am getBean() yöntemini çağırarak her zaman util basit oluşturduk DataBean

için kapsamını prototype eklendi Bu fasulye ve bu benim için sorun. klon yöntemini kullanmadan yay yapılandırmasından yapabilir miyim? Teşekkürler.

cevap

32

Spring için lookup method işlevselliğini arıyorsunuz.

@Component 
public abstract class Test { 
    public abstract DataBean getBean(); 
} 

Ve zamanında bunu hayata geçirmesi gerektiğini Bahar söyle: Fikir böyle soyut bir yöntem sağlamalarıdır

Şimdi
<bean id="test" class="com.test.Test"> 
    <lookup-method name="getBean" bean="dataBean"/> 
</bean> 

Eğer gerçekte Bahar oluşturulan arayacak Test.getBean diyoruz her zaman yöntem. Bu yöntem, DataBean örneğinde ApplicationContext sorusunu soracaktır. Bu fasulye prototype -scoped ise, her arama yaptığınızda yeni örnek alırsınız. Bu özellik hakkında here yazdım.

+1

Sadece CLASSPATH'e [cglib.jar] (http://repo1.maven.org/maven2/cglib/cglib/2.2.2/cglib-2.2.2.jar) ekleyin. –

+0

ve asm-all-3.3.1.jar da :), Teşekkürler iyi çalışıyor! –

+0

Eğer 'DataBean' bir jenerik ise ve içinde ' '' '' 'türüne bağlı olarak @ Autowired' varsa bunu nasıl ele alırsınız? –

İlgili konular