【问题标题】:Spring Beans Mule - Property of type interface/classSpring Beans Mule - 接口/类类型的属性
【发布时间】:2013-07-11 00:03:29
【问题描述】:

我正在尝试指定一个具有接口IServiceHandler 的bean。我想允许将该属性设置为实现IServiceHandler 接口的任何内容。例如GenericServiceHandler

这是我的 Mule 流程中的 bean 代码:

<spring:beans>
    <spring:bean id="Fake_Proxy" class="xxx.FakeWebServiceProxy" scope="prototype">
        <spring:property name="serviceHandler" value="xxx.GenericServiceHandler">
        </spring:property>
    </spring:bean>
</spring:beans>

FakeWebSericeProxy 有一个名为serviceHandler 的属性,其类型为IServiceHandler

问题是我在尝试运行 Mule 应用程序时不断收到以下消息:

java.lang.IllegalStateException:无法将类型 [java.lang.String] 的值转换为属性“serviceHandler”所需的类型 [ca.mpac.esb.component.webservice.IServiceHandler]:找不到匹配的编辑器或转换策略

我读过 here 说 Spring 会自动处理这样的情况,但它似乎不适用于我的情况。

【问题讨论】:

    标签: java spring ejb javabeans mule


    【解决方案1】:

    FakeWebServiceProxy 中的字段似乎是IServiceHandler 类型而不是Class 类型,如果您只想接受类,请将属性类型更改为Class。然后 Spring 应该将 String 值转换为适当的 Class 实例并注入它。

    但是如果你想注入一个IServiceHandler类型的对象实例,你必须先创建一个bean,然后将它注入Fake_Proxy bean:

    <spring:beans>
        <spring:bean id="serviceHandlerBean" class="xxx.GenericServiceHandler" scope="prototype"/>
        <spring:bean id="Fake_Proxy" class="xxx.FakeWebServiceProxy" scope="prototype">
            <spring:property name="serviceHandler" ref="serviceHandlerBean"/>
        </spring:bean>
    </spring:beans>
    

    【讨论】:

    • 谢谢,我已经想到你可以将 serviceHandler 创建为 bean,然后将其作为参考注入,但是大多数使用 Spring 的人会接受吗?
    • @TheAJ:为什么不呢?您甚至可以在分配中内联 serviceHandlerBean 定义,例如 &lt;property name="serviceHandler"&gt;&lt;bean class="xxx.GenericServiceHandler"/&gt;&lt;/property&gt; 而不是定义和引用模式。
    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2021-06-28
    • 2020-01-13
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多