NoSuchBeanDefinitionException@Autowired-Spring 4.1.6.1版本
我有两门课A和BNoSuchBeanDefinitionException@Autowired-Spring 4.1.6.1版本,spring,autowired,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.NoSuchBeanDefiniti
@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”的bean
如果我将“xyz”更改为“b123”,仍然会得到相同的错误(用b123代替xyz)
我有点困惑为什么@Autowired正在寻找@Component中定义的名为bean的bean,但仍然没有找到它!
如果我从类B中的@Component中删除bean名称,那么@Autowired将查找名为“B”的bean,即类名
[这些类位于不同包中的不同罐子中]
在调试spring代码时,我发现spring首先计算要注入的beanName为“xyz”,然后搜索未找到的bean“xyz”,并在DefaultListableBeanFactory.java的第687行抛出NoSuchBeanDefinitionException。
这种行为要么是由于spring中的错误,要么是应用程序中的应用程序上下文真的一团糟 Spring试图将名为“xyz”的bean注入a.b123。在您的配置中,没有任何东西会导致spring尝试这样做。 您的代码:
@Component("xyz")
public class B
正在创建名为“xyz”的bean,但不会导致给定的异常。请尝试使用@Qualifier@Qualifier当存在不明确的bean时需要。在这种情况下,找不到bean。Spring是否配置为在
B
所在的包中查找组件?@Morfic是的,Spring正在扫描并拾取B。对于自动布线b123,Spring查找类型为B的bean,然后将注入bean的bean名称计算为“xyz”,然后搜索名为“xyz”的bean,但没有找到它!!!根据我的发现,这似乎是正在发生的事情。实际情况稍微复杂一些,因为B被参数化了,需要注入子类型“xyz”。@Prakash您能添加一个来说明确切的情况吗?此外,如果您更喜欢以内联方式共享源代码,而不是通过github或类似的服务共享源代码,请提供有关spring(boot?!)的详细信息&任何其他需要的库版本都会间歇性地处理此问题。意见:1。不同的DefaultListableBeanFactory查找和搜索bean“xyz”。2.如果我有简单的类,这个问题是不可复制的。仅针对泛型类型3存在问题。即使我将找不到的类移动到同一个jar中,问题仍然是可复制的。看起来像是spring处理泛型类型的bug。Java 1.7、Spring 4.1.6、Spring批处理3.0.6、Spring批处理管理1.3.1