弹簧自动assembly和原型范围

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

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

 @Autowired(required = true) private Foo foo; 

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

NoSuchBeanDefinitionException:没有为依赖项找到Foo类型的匹配bean:预期至少有1个bean符合此依赖项的autowire候选者

一旦我将注入的bean范围更改为"singleton"它就可以正常工作。

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

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

先谢谢,Avner

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

  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 

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

我相信它的xml中为该bean声明的原型/单例事物是个问题。

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

我认为这是不允许的。 逻辑是如果它被允许,那么无论何时使用该类,它都需要将该bean重新实例化为其字段。 这很奇怪,特别是如果这个bean作为一个字段自动assembly的类本身就是一个单例。

是否有任何解决方法(除了手动获取bean)?

只是尝试删除范围属性,如果它是原型属性,则不会检索它。 如果在applicationContext中声明了这些bean(服务和DAO),那么让autowire注释将其作为单例进行处理,因为默认bean是单例,它应该是单例。

如果注入的bean范围是“Singleton”,则bean的相同实例将自动连接。 如果注入的bean范围是’prototype’,则将创建新实例作为自动连接过程的一部分。

您使用的是什么版本的Spring,还附加了spring-context.xml以获取更多详细信息。