【问题标题】:How can I make Spring identify beans without using xml or annotations?如何在不使用 xml 或注释的情况下让 Spring 识别 bean?
【发布时间】:2011-07-19 16:34:34
【问题描述】:

我正在尝试将 Spring 框架集成到包含数千个 pojo 的现有项目中。
编写 xml 配置文件或遍历每个文件并注释类将是一项艰巨的耗时任务,那么有没有办法让 Spring 扫描包并仅基于名称约定识别 bean?

【问题讨论】:

  • 使用<context:component-scan/>有什么问题?这就是你所需要的,听起来像。
  • @skaffman:问题是我不想修改现有代码,所以如果我使用它,我将不得不手动注释我需要通过@component 连接的所有类或其专用注释之一。
  • 那么您想如何识别这些豆子?能举个例子吗?

标签: java xml spring annotations javabeans


【解决方案1】:

<context:component-scan>@Component 扫描行为只是默认行为。您可以使用基于名称的过滤器自定义其行为。示例见section 3.10.3 of the manual

<beans>

   <context:component-scan base-package="org.example">
      <context:include-filter type="regex" expression=".*Stub.*Repository"/>
      <context:exclude-filter type="annotation"
                              expression="org.springframework.stereotype.Repository"/>
   </context:component-scan>

</beans>

所以你可以让它通过类的命名约定来检测你的bean。

【讨论】:

    【解决方案2】:

    第三个选项是使用@Configuration 和@Bean Annotations 并使用Java-based container configuration。但是随后您正在编写代码来将您的依赖项连接在一起并创建您的 bean。

    【讨论】:

      【解决方案3】:

      您需要问自己的第一个问题是,真的有必要连接所有这些 bean 吗?在系统中的所有对象中,只有一小部分真正需要连接:可配置的和依赖于其他连接 bean 的那些。

      【讨论】:

      • 你是对的,但即使我试图通过找出需要连接的 bean 来缩小数字范围,这个数字仍然很大(我正在与一家企业打交道申请)
      【解决方案4】:

      同意博卓。

      有一个解决方法 - 您可以定义自己的自定义 BeanFactoryPostProcessor,您可以在其中放置根据命名约定扫描现有项目中的类的逻辑,并为现有项目中的类注册 BeanDefinitions。

      是的,但这需要编码,而且不是开箱即用的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 2013-01-06
        相关资源
        最近更新 更多