弹簧自动装配和原型范围

Avn*_*evy 13 java spring annotations inversion-of-control

我有一个名为Bar的类,其中包含以下注释: @Configurable(autowire = Autowire.BY_TYPE)

在私有成员上,我有以下注释:

@Autowired(required = true)
private Foo foo;
Run Code Online (Sandbox Code Playgroud)

在spring配置中,我有一个类Foo的bean.如果bean被定义,scope="prototype"它不起作用,我得到以下异常:

NoSuchBeanDefinitionException:没有为依赖项找到Foo类型的匹配bean:期望至少有一个bean可以作为此依赖项的autowire候选者

一旦我将注入的bean范围更改为"singleton"它就可以了.

是否允许原型scoped bean的自动接线?

有没有解决方法(除了手动获取bean)?

先谢谢,Avner

Avn*_*evy 13

以下链接为此类方案提供了替代解决方案:

  1. http://whyjava.wordpress.com/2010/10/30/spring-scoped-proxy-beans-an-alternative-to-method-injection/
  2. http://benkiew.wordpress.com/2012/04/22/spring-2-5-x-create-prototype-in​​stances-from-code/

第一个链接谈到添加到Foo:

@Component
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
class Foo
Run Code Online (Sandbox Code Playgroud)

每次调用都会导致新实例.

  • 只有链接答案很糟糕,如果给定链接消失会发生什么? (4认同)