2014-03-26 52 views
1

我通過實例化XML配置和實例工廠方法的一些豆類:的FactoryBean方法與參數

<bean id="galleryBeanFactory" class="de.tikron.webapp.gallery.bean.XmlGalleryBeanFactory" /> 

<bean id="pictureBean" factory-bean="galleryBeanFactory" factory-method="createPictureBean" scope="prototype" /> 

我實例化我的原型豆類方案由BeanFactory.getBean(「豆」,參數......):

BeanFactory bf = ContextLoader.getCurrentWebApplicationContext(); 
PictureBean pictureBean = (PictureBean) bf.getBean("pictureBean", picture); 

隨着春季3我想改變註釋的基於Java的bean配置。這裏是我的FactoryBean:

@Configuration 
public class AnnotatedGalleryBeanFactory implements GalleryBeanFactory 

    @Bean 
    @Scope(BeanDefinition.SCOPE_PROTOTYPE) 
    protected PictureBean createPictureBean(Picture picture) { 
    PictureBean bean = new PictureBean(); 
    bean.setPicture(picture); 
    return bean; 
    } 
} 

我的問題:我該如何傳遞參數?上面的代碼會導致org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到符合條件的[... model.Picture]的bean。

+0

'PictureBean'和'Picture'之間的關係是什麼?什麼類是'FactoryBean'? –

+0

圖片是一個持久化實體,PictureBean(可能名字有點混亂)應該是提供附加方法的圖片的包裝。 – marsman

+0

我可能混淆了FactoryBean和工廠方法。對於練習,我已經實現了FactoryBean 。但是同樣的問題再次出現:我如何通過編程方式將參數傳遞給FactoryBean? getBean(bean,args)在哪裏通過? – marsman

回答

4

有了一個bean定義像

@Bean 
@Scope(BeanDefinition.SCOPE_PROTOTYPE) 
protected PictureBean createPictureBean(Picture picture) { 
    PictureBean bean = new PictureBean(); 
    bean.setPicture(picture); 
    return bean; 
} 

bean定義名稱爲createPictureBean。您可以使用BeanFactory#getBean(String, Object...)每次調用它像這樣

ApplicationContext ctx = ...; // instantiate the AnnotationConfigApplicationContext 
Picture picture = ...; // get a Picture instance 
PictureBean pictureBean = (PictureBean) ctx.getBean("createPictureBean", picture); 

Spring將使用給定的參數(picture在這種情況下)來調用@Bean方法。

如果你沒有提供參數,Spring會在調用方法時嘗試自動裝入參數,但會失敗,因爲在上下文中沒有Picture bean。

+0

非常感謝。我的錯誤是工廠方法的名稱。我將它改爲pictureBean,現在一切正常。 – marsman