参考下面的例子, Autowiring Unmanaged Beans Annotated With @Component 它声明您需要在xml文件中注册bean,然后只有您可以在Java类中连接它,即使您已经使用了context:component-scan。 但是示例Difference between context:annotation-config vs context:component-scan [见最高票数的例子(174)] 声明您可以连接bean而不在xml文件中定义它。
所以我感到困惑哪个是正确的定义?我实际上尝试并获得了第一个url(Autowiring unmanaged beans)中描述的异常。如果我们假设xml文件中需要bean定义那么<context:annotation-config>
和<context:component-scan>
之间的真正优势或区别是什么。
我发现这两个链接相互矛盾
答案 0 :(得分:2)
您可以在XML中混合和匹配声明bean,并使用@ Component / @ Service / @ Repository注释它们。您可以在XML中声明的bean和使用@ Component / @ Service / @ Repository注释的bean中使用@Autowired。您可以使用@Autowired将以XML格式声明的bean注入带注释的bean中,并将带注释的bean注入以XML格式声明的bean中。
&LT;上下文:注解的配置/&GT;只需使用@Autowired支持对托管bean的依赖注入,以及其他一些功能。
&lt; context:component-scan ... /&gt;启用&lt; context:annotation-config /&gt;的所有内容支持@ Component / @ Service / @ Repository等等。通常,您只需要使用&lt; context:component-scan /&gt;。
“非托管”bean是既未在XML中声明也未在注释和组件中进行扫描的bean。显然,您可以尝试使用Spring将依赖项注入非托管bean,使用AOP和&lt; context:spring-configured /&gt;。有关详细信息,请参阅此处的文档: