使用 context:component-scan 自动装配取消管理 bean

Posted

技术标签:

【中文标题】使用 context:component-scan 自动装配取消管理 bean【英文标题】:autowire unmanage beans using context:component-scan 【发布时间】:2013-04-28 13:06:16 【问题描述】:

参考下面的例子, 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 中描述的异常(自动装配非托管 bean)。如果我们假设 xml 文件中需要 bean 定义,那么<context:annotation-config><context:component-scan> 之间的真正优势或区别是什么。

我发现两个链接相互矛盾

【问题讨论】:

【参考方案1】:

您可以在 XML 中混合和匹配声明 bean 并使用 @Component/@Service/@Repository 注释它们。您可以在以 XML 声明的 bean 和使用 @Component/@Service/@Repository 注释的 bean 中使用 @Autowired。您可以使用 @Autowired 将 XML 中声明的 bean 注入到带注释的 bean 中,并将带注释的 bean 注入到 XML 中声明的 bean 中。

仅支持使用@Autowired 对托管bean 进行依赖注入,以及其他一些功能。

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

启用 启用的所有功能,以及对@Component/@Service/@Repository 等的支持。通常你只需要使用

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

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

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

【讨论】:

以上是关于使用 context:component-scan 自动装配取消管理 bean的主要内容,如果未能解决你的问题,请参考以下文章

spring注解注入:<context:component-scan>详解(转)

spring里面的context:component-scan

匹配的通配符是严格的,但找不到元素“context:component-scan”的声明

context:component-scan的使用说明

context:component-scan 分析

今日收获-context:component-scan