【发布时间】:2014-03-26 16:21:17
【问题描述】:
我正在通过 XML 配置和实例工厂方法实例化一些 bean:
<bean id="galleryBeanFactory" class="de.tikron.webapp.gallery.bean.XmlGalleryBeanFactory" />
<bean id="pictureBean" factory-bean="galleryBeanFactory" factory-method="createPictureBean" scope="prototype" />
我通过 BeanFactory.getBean("bean", arguments...) 以编程方式实例化我的原型 bean:
BeanFactory bf = ContextLoader.getCurrentWebApplicationContext();
PictureBean pictureBean = (PictureBean) bf.getBean("pictureBean", picture);
在 Spring 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: No qualifying bean of type [...model.Picture] found for dependency.
【问题讨论】:
-
PictureBean和Picture是什么关系?FactoryBean是什么类? -
Picture 是一个持久性实体,PictureBean(可能名称有点混乱)应该是 Picture 的包装器,提供额外的方法。
-
我可能混淆了 FactoryBean 和工厂方法。为了练习,我现在实现了 FactoryBean
。但同样的问题又来了:如何以编程方式将参数传递给 FactoryBean? getBean(bean, args) 会将它们传递到哪里?
标签: java spring configuration annotations