【问题标题】:Reference an Annotated Spring Component in an XML Bean Definition在 XML Bean 定义中引用带注释的 Spring 组件
【发布时间】:2013-07-04 01:00:54
【问题描述】:

我正在使用一个外部库,该库要求我使用 XML Bean 定义对其进行配置;在 Bean 定义中,我需要从我的项目中提供一个带有 Bean 的外部类。我正在使用带有组件扫描的弹簧注释。

如何在 XML Bean 定义中引用我的注释 Bean?

除了创建 XML Bean 定义之外还有其他方法吗?

详情: Spring 3.0.7

【问题讨论】:

    标签: spring spring-3 spring-annotations


    【解决方案1】:

    无论它是如何创建的(基于 XML 或注释元数据),每个 bean 最终都会以唯一的名称进入应用程序上下文。

    如果您刚刚使用@Component 或派生类注释您的类,而没有说明任何名称,则将应用默认命名方案并且bean 名称将是您的类名称,第一个字符小写:ClassName => "className"

    考虑到这一点,如果您需要在 XML bean 定义中注入该 bean,您可以像使用上下文中的任何其他 bean 一样进行操作:

    <bean id="someBean" class="SomeClass">
        <property name="someProp" ref="className"/><!-- to stick to the above example -->
    </bean>
    

    由于您将注释与 XML 混合,应用程序上下文将能够正确定位“className”bean。

    【讨论】:

      【解决方案2】:

      @Service 注释采用可选的字符串值,可用于为 bean 指定您选择的名称。例如,如果您的自定义 bean 看起来像:

      @Service("mySpecialName")
      public class MyClass { ... }
      

      那么你的 xml 可能有:

      <bean class="com.someone.else.library.SomeClass">
        <property name="someProp" ref="mySpecialName"/>
      </bean>
      

      【讨论】:

        【解决方案3】:

        确保在您的 xml 文件中添加以下代码

        <context:component-scan base-package="" />
        <context:annotation-config />
        

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 1970-01-01
          • 2015-02-06
          • 1970-01-01
          • 2017-02-18
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 1970-01-01
          相关资源
          最近更新 更多