2012-07-02 3 views
2

Я хочу иметь возможность передавать идентификатор компонента в другой компонент по ссылке. Так что, если у меня есть это:Как вставить идентификатор Spring bean в другой Spring Configured Bean?

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

public class ReferenceBean { 

    // The spring injected value of this should be 'specialName'   
    public String refId; 

    // getter & setter for refId 
} 

Причина мне это нужно, это что ReferenceBean на самом деле маршрут строитель в Camel и направляет сообщения SpecialBean через Spring Реестре. Я новичок в Spring и Camel, поэтому, если это плохо задуманные вопросы, мои извинения.

ответ

2

.. Вы можете использовать пружину-EL -

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

Я сам это нашел. Спасибо за вашу помощь! – Spina

+0

Когда я пытаюсь сделать это, я получаю org.springframework.expression.spel.SpelEvaluationException: EL1008E: (поз. 13): Поле или имя свойства 'name' не могут быть найдены на объекте типа (...) – cfinley

0

насчет:

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

Таким образом, ваш боб должен быть введен (если вы измените атрибут типа String в my.SpecialBean

Тогда вы можете получить любой атрибут вы хотите

+0

Это не появляется на работе в моем обстоятельстве. Я получаю исключение из текста следующим образом: BeanCreationException: Ошибка создания bean с именем 'referenceBean' ... Не удалось преобразовать значение свойства типа 'my.SpecialBean' в требуемый тип 'java.lang.String' для свойства 'refId'. Я думаю, проблема в том, что тип refId является String, но я назначаю объект типа my.SpecialBean. – Spina

+0

Да, это то, что «при условии, что вы изменяете атрибут String в my.SpecialBean', стоял за ^^ –

+0

Я понимаю, что инъекция компонента не имеет смысла, если вы хотите использовать идентификатор bean на верблюжьем пути. Итак, почему бы просто не ввести идентификатор компонента, как я предложил выше? –

2

Почему бы не просто поставить идентификатор stati В этом случае? Это не изменится позже, так зачем вам здесь что-то осложнять?

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

. мой первоначальный подход. Мне понравилось, потому что это просто и понятно. Однако, когда я изменяю идентификатор компонента, я не хочу рисковать забыть обновить ReferenceBean. Идеальное решение может привести к отказу Spring xml. Менее идеальным решением может стать неудача Spring при запуске. Решение, которое вы дали, будет терпеть неудачу только после прохождения маршрута Camel. – Spina

+0

Хорошо. Если вы хотите, чтобы весна не сработала, если вы измените один из двух, то вышеизложенное решение от Biju лучше. –

0

Вы можете использовать idref элемент (см Spring XML Beans Schema):

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