当前位置: 首页 > 知识库问答 >
问题:

带参数的Spring FactoryBean方法

聂迪
2023-03-14

我正在通过XML配置和实例工厂方法实例化一些bean:

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

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

我实例化我的原型bean编程由BeanFactory.getBean(bean,参数...):

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

在Spring3中,我想切换到基于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.NoSuchBean定义异常:没有类型[...模型的合格bean。图片]找到依赖项。

共有1个答案

明松
2023-03-14

用一个豆的定义

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

bean定义名称是createPictureBean。每次使用BeanFactory#getBean(字符串,对象…)都可以调用它

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

Spring将使用给定的参数(picture在本例中)调用@Bean方法

如果不提供参数,Spring会在调用该方法时尝试自动连接参数,但会失败,因为上下文中没有Picturebean。

 类似资料:
  • 问题内容: 在Java 8中,具有以下类 可以通过方法引用来调用setBornTrue方法: 但是我将如何使用forEach方法并通过 方法引用 使用setBorn ?试: 导致错误“无法解析方法setBorn”。 另外,我该如何传递True的值? 问题答案: 使用lambda: 没有发现仅使用Java 8 API的其他方法。 使用此自定义功能: 你可以做: 如果Java API或库中提供了这种实

  • 我试图模仿下面的行,但它在执行时给出了一个错误,它说: 此处检测到错误的参数匹配器: when(mock.get(anyInt())).thenreturn(null); doThrow(new RuntimeException()).When(mock).SomeVoidMethod(anyObject()); verify(mock).somemethod(contains(“foo”)) 这

  • 我已经用Java开发了一个应用程序,我正在尝试使用Powermockito创建单元测试(我应该补充一点,我是单元测试新手)。 我有一个名为Resource的类,它有一个名为readResources的静态方法: ResourcesElement也由我编写。在测试中,我想创建自己的资源,所以我希望上面的方法什么都不做。我试着使用以下代码: 单元测试引发异常: org.mockito.exceptio

  • 我有一个可用于注释的方面: 连接点: 我可以在具有

  • 问题内容: 我已经用Java开发了一个应用程序,并试图使用Powermockito创建单元测试(我应该补充说我是单元测试的新手)。 我有一个名为Resource的类,该类具有一个称为readResources的静态方法: ResourcesElement也由我编码。在测试中,我想创建自己的资源,因此我希望上述方法什么都不做。我尝试使用此代码: 单元测试引发异常: org.mockito.excep

  • 问题内容: 为什么直接将我作为参数传递,或者传递给我分配了 值的键 (显然)会有所不同? 换句话说,为什么(commented-out)第二个调用没有分派给? 更新: 我使用Java 1.6。我可以毫无问题地编译Hemal的代码,但是我的仍然无法编译。我看到的唯一区别是Hemal的方法是静态的,而我的不是。但是我真的不明白为什么这应该有所作为…? 更新2: 解决。我在类中有另一个方法foo(Run