NoSuchBeanDefinitionException @Autowired - Spring 4.1.6.RELEASE

时间:2016-03-09 19:06:37

标签: spring autowired

我有两个A和B班。

@Component("abc")
public class A {
  @Autowired
  private B b123;
}

@Component("xyz")
public class B {

}

在应用程序启动时(在tomcat中)我收到以下错误: BeanCreationException:无法自动装配字段:private B A.b123;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为' xyz'已定义

如果我改变了' xyz'到' b123' ,我仍然得到相同的错误(用b123代替xyz)

我有点疑惑为什么@Autowired正在寻找@Component中定义的名称的bean,但仍未找到它! 如果我从B类中的@Component中删除bean名称,那么@Autowired将查找名称为' B'的bean,即类名!

[这些课程在不同包装的不同罐子里]

调试spring代码,我发现Spring首先计算要注入的beanName作为' xyz',稍后它会搜索bean' xyz'它找不到并在DefaultListableBeanFactory.java的第687行抛出NoSuchBeanDefinitionException。 这种行为要么是由于春天的错误,要么应用程序上下文在应用程序中真的搞砸了!

1 个答案:

答案 0 :(得分:0)

Spring尝试注入一个名为&x; xyz'的bean。进入A.b123。在你的配置中,没有任何东西可以导致春天尝试这个。 你的代码:

Phone#

正在创建一个名为' xyz'的bean。但不会导致给定的例外。