autowire unmanage beans using context:component-scan

时间:2013-05-04 04:29:20

标签: spring spring-mvc annotations spring-3

参考下面的例子, 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>之间的真正优势或区别是什么。

我发现这两个链接相互矛盾

1 个答案:

答案 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的依赖注入,以及其他一些功能。

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-annotation-config

&lt; context:component-scan ... /&gt;启用&lt; context:annotation-config /&gt;的所有内容支持@ Component / @ Service / @ Repository等等。通常,您只需要使用&lt; context:component-scan /&gt;。

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-classpath-scanning

“非托管”bean是既未在XML中声明也未在注释和组件中进行扫描的bean。显然,您可以尝试使用Spring将依赖项注入非托管bean,使用AOP和&lt; context:spring-configured /&gt;。有关详细信息,请参阅此处的文档:

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/aop.html#aop-atconfigurable