我有一个名为Bar的类,带有以下注释:
@Configurable(autowire = Autowire.BY_TYPE)
在私人会员身上,我有以下注释:
@Autowired(required = true)
private Foo foo;
在spring配置中,我有一个类Foo的bean。如果使用scope="prototype"
定义bean,则它不起作用,我得到以下异常:
NoSuchBeanDefinitionException:找不到依赖关系的类型为Foo的匹配bean: 预计至少有1个bean有资格成为此依赖关系的autowire候选者
一旦我将注入的bean范围更改为"singleton"
,它就可以正常工作。
是不是允许原型范围豆的自动接线?
是否有任何解决方法(除了手动获取bean之外)?
提前致谢, 阿夫纳
答案 0 :(得分:12)
以下链接为此类方案提供了替代解决方案:
第一个链接谈到添加到Foo:
@Component
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
class Foo
每次调用都会导致新实例。
答案 1 :(得分:0)
我相信它在xml中为该bean声明的原型/单例事件是个问题。
是不是允许原型范围豆的自动接线?
我认为这是不允许的。逻辑是如果它被允许,那么无论何时使用该类,它都需要将该bean始终作为其字段重新实例化。这很奇怪,特别是如果这个bean作为一个字段自动装配的类本身就是一个单独的。
是否有任何解决方法(除了手动获取bean)?
只是尝试删除scope属性,因为如果它是prototype属性,则不会被检索。如果在你的applicationContext中声明了那些bean(服务和DAO),那么让autowire注释将它作为singleton来获取,因为默认bean是singleton,它应该是。
答案 2 :(得分:-1)
如果注入的bean范围是“Singleton”,则bean的相同实例将自动连接。如果注入的bean范围是'prototype',则将创建新实例作为自动连接过程的一部分。
您正在使用的是什么版本的Spring,还附加了spring-context.xml以获取更多详细信息。