【问题标题】:Autowire Annotation in Spring without using Component Scanning在不使用组件扫描的情况下在 Spring 中自动装配注释
【发布时间】:2011-01-28 09:52:53
【问题描述】:

是否可以在不使用组件扫描的情况下使用 @Autowired 注释自动装配 bean?

【问题讨论】:

    标签: spring dependency-injection ioc-container autowired


    【解决方案1】:

    是的。 <context-component-scan .. />负责发现带有@Component@Controller@Service@Respository等注解的bean。

    为了处理注释(@Autowired@Resource 等),您需要 <context:annotation-config />。因此,注释会在 applicationContext.xml 中列出的 bean 上进行处理。

    据我所知,<context-component-scan .. /> 会自动激活<context:annotation-config />

    Spring 2.5 和 3.0 都是如此。 (感谢斯卡夫曼)

    【讨论】:

    • @Bozho Good (+1) 看看这个问题:stackoverflow.com/questions/2458769/…
    • (+1) 是的,在 3.0 中仍然如此
    • 我使用的是 Spring 3.1,自动装配仅适用于 。事实上,我不需要 来激活 bean 中的自动装配
    【解决方案2】:

    我从未尝试过不启用组件扫描,但我可以确认 @Autowire 注释在 Spring 3.0.x 中有效,即使是通过 XML 定义的 bean。

    【讨论】:

      【解决方案3】:

      当使用AnnotationConfigApplicationContext 时,注释配置处理器总是被注册,这意味着在@ComponentScan 级别禁用它们的任何尝试都将被忽略。

      【讨论】:

        【解决方案4】:

        如果问题中的意思是您应该明确说明:
        - <context:component-scan ...> 在您的 xml 文件中(它启用 <context:annotation-config />

        - @ComponentScan 在你的 java 配置中

        那么答案是 - 是的,可以在您的代码或 xml 文件中没有上述任何语句的情况下启用组件扫描。

        另一种方法是使用AnnotationConfigApplicationContext

        AnnotationConfigApplicationContext context= 
        new AnnotationConfigApplicationContext("org.example.your.package");
        

        其中“org.example.your.package”是您的原型注释类的包:@Component、@Repository、@Service 等。 AnnotationConfigApplicationContext 将在基础包和内部包中搜索您的 bean。

        【讨论】:

          【解决方案5】:

          不,如果您使用基于 java 的配置,我们必须使用 @ComponentScan (或)<context-component-scan .. /> 用于基于 xml 的配置。

          注意:如果您没有使用任何方法,则不会在 AplicationContext 中创建相应的实例。

          当您尝试访问资源时 (http://localhost:8080/customers) 将结束

          警告:未找到包含 URI [/customers] 的 HTTP 请求的映射 DispatcherServlet 名称为 'dispatcher

          【讨论】:

            猜你喜欢
            • 2014-09-13
            • 2014-12-26
            • 1970-01-01
            • 2014-06-30
            • 1970-01-01
            • 2013-07-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多