Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将SpringbeanID注入另一个Spring配置的bean?_Java_Spring_Apache Camel - Fatal编程技术网

Java 如何将SpringbeanID注入另一个Spring配置的bean?

Java 如何将SpringbeanID注入另一个Spring配置的bean?,java,spring,apache-camel,Java,Spring,Apache Camel,我希望能够通过引用将一个bean ID传递给另一个bean。如果我有这个: <bean id="specialName" class="my.SpecialBean"/> <bean id="referenceBean" class="my.ReferenceBean"> <property name="refId" value="<specialName.name>"/> </bean> 我之所以需要它,是因为Referen

我希望能够通过引用将一个bean ID传递给另一个bean。如果我有这个:

<bean id="specialName" class="my.SpecialBean"/>
<bean id="referenceBean" class="my.ReferenceBean">
    <property name="refId" value="<specialName.name>"/>
</bean>
我之所以需要它,是因为ReferenceBean实际上是Camel中的一个路由生成器,它通过Spring注册表将消息定向到SpecialBean。我不熟悉春天和骆驼,所以如果这是一个考虑不周的问题,我很抱歉。

那么:

<bean id="specialName" class="my.SpecialBean" />
<bean id="referenceBean" class="my.ReferenceBean">
    <property name="refId" ref="specialName" />
</bean>

这样就应该注入bean(前提是您更改my.SpecialBean中的String属性)

然后,您可以获得所需的任何属性。

关于:

<bean id="specialName" class="my.SpecialBean" />
<bean id="referenceBean" class="my.ReferenceBean">
    <property name="refId" ref="specialName" />
</bean>

这样就应该注入bean(前提是您更改my.SpecialBean中的String属性)


然后您可以获得任何想要的属性。

您可以使用Spring EL-

<bean id="specialName" class="my.SpecialBean"/>
<bean id="referenceBean" class="my.ReferenceBean">
    <property name="refId" value="#{specialName.name}"/>
</bean>

您可以使用Spring EL-

<bean id="specialName" class="my.SpecialBean"/>
<bean id="referenceBean" class="my.ReferenceBean">
    <property name="refId" value="#{specialName.name}"/>
</bean>

为什么不将id静态地放入refId中呢?它以后不会改变,所以为什么要在这里做一些复杂的事情呢

<bean id="specialName" class="my.SpecialBean"/>
<bean id="referenceBean" class="my.ReferenceBean">
    <property name="refId" value="specialName"/>
</bean>

为什么不将id静态地放入refId中呢?它以后不会改变,所以为什么要在这里做一些复杂的事情呢

<bean id="specialName" class="my.SpecialBean"/>
<bean id="referenceBean" class="my.ReferenceBean">
    <property name="refId" value="specialName"/>
</bean>

您可以使用
idref
元素(请参阅):


您可以使用
idref
元素(请参阅):




在我的情况下,这似乎不起作用。我遇到如下文本异常:BeanCreationException:创建名为“referenceBean”的bean时出错……无法将类型为“my.SpecialBean”的属性值转换为属性“refId”所需的类型“java.lang.String”。我认为问题在于refId的类型是String,但我是一个指定my.SpecialBean.Yep类型的对象,如果您更改my.SpecialBean中的String属性,这就是
所代表的^^^^^我理解,如果您想在驼峰路径中使用bean id,注入bean是没有意义的。那么为什么不像我上面建议的那样简单地注入bean id呢?您的回答正是Spina所说的我在建议另一条路,并在我最后的评论中解释了为什么这条路对他不起作用:)我想我现在理解了你的建议。我对更改refId的类型犹豫不决。Camel路由使用反射调用SpecialBean上的方法。要做到这一点,它需要知道bean的注册表名和要调用的方法的名称。事实上,我不相信这个解决方案会起作用,因为它实际上没有提供注册表ReferenceBean的名称(这是反射工作所必需的。)我误解了你的建议?在我的情况下,这似乎不起作用。我遇到如下文本异常:BeanCreationException:创建名为“referenceBean”的bean时出错…未能将类型为“my.SpecialBean”的属性值转换为属性“refId”所需的类型“java.lang.String”。我认为问题在于refId的类型是String,但是我正在分配一个类型为my.SpecialBean.Yep的对象,如果您更改my.SpecialBean
中的String属性,这就是
所代表的^^^^^我理解,如果您想在驼峰路径中使用bean id,注入bean是没有意义的。那么为什么不像我上面建议的那样简单地注入bean id呢你的回答正是斯皮纳在这里需要和需要做的。我在建议另一条路,并在我最后的评论中解释了为什么这条路对他不起作用:)我想我现在明白你的建议了。我很犹豫是否要更改refId的类型。驼峰路由使用反射调用SpecialBean上的方法。为此,它需要知道bean的注册表名和要调用的方法的名称。事实上,我不相信这个解决方案会起作用,因为它实际上没有向ReferenceBean提供注册表名(这是反射工作所必需的)。我很抱歉我误解了你的建议?我自己刚刚发现了这一点。谢谢你的帮助!当我尝试这样做时,我得到一个org.springframework.expression.spel.SpelEvaluationException:EL1008E:(位置13):在类型为(…)的对象上找不到字段或属性“name”。我自己刚找到这个。谢谢你的帮助!当我尝试这样做时,我得到一个org.springframework.expression.spel.SpelEvaluationException:EL1008E:(位置13):在类型为(…)的对象上找不到字段或属性“name”。您的建议是我最初的方法。我喜欢它,因为它简单明了。然而,当我更改bean ID时,我不想冒忘记更新ReferenceBean的风险。理想的解决方案会导致SpringXML验证失败。不太理想的解决方案会导致Spring在启动时失败。您给出的解决方案只有在穿越驼峰路线时才会失败。好的。。如果你想让spring失败,如果你改变了其中一个,那么Biju的上述解决方案会更好。你的建议是我最初的方法。我喜欢它,因为它简单明了。然而,当我更改bean ID时,我不想冒忘记更新ReferenceBean的风险。理想的解决方案会导致SpringXML验证失败。不太理想的解决方案会导致Spring在启动时失败。您给出的解决方案只有在穿越驼峰路线时才会失败。好的。。如果你想让spring失败,如果你改变了其中一个,那么Biju的上述解决方案会更好。