Весна: Получить встроенный бин по имени - PullRequest
1 голос
/ 04 ноября 2010

Я бы хотел получить внутренний боб по имени.Возможно ли это с Spring API?

Сейчас я использую такой Spring 2.5 API

ConfigurableApplicationContext.getBean(String paramString)

Пример XML:

<bean id="parent" parent="t_Parent">
    <property name="items">
        <bean id="child" parent="t_Child">
            <property name="ABC" value="test"/>
        </bean>
    </property>
</bean>

Я хотел бы получитьвнутренний (t_Child) бин с идентификатором "child".Например, ConfigurableApplicationContext.getBean ("дочерний").Весна не может найти такой боб (потому что он внутренний).В то же время .getBean («родитель») работает нормально.

Есть мысли?

Ответы [ 4 ]

4 голосов
/ 04 ноября 2010

Вы не можете.

Из документов :

Элемент внутри элементов or используется для определения так называемого внутреннего компонента.Для определения внутреннего бина не нужно определять какой-либо идентификатор или имя, и лучше даже не указывать какое-либо значение идентификатора или имени , поскольку контейнер идентификатора или имени просто будет игнорироваться контейнером .

Если вам это нужно, определите его как обычный бин.

2 голосов
/ 04 ноября 2010

Вы не можете, но вы можете создать свой внутренний бин снаружи (чтобы он больше не был внутренним бином ...) и затем ссылаться на него внутри свойства:

<bean id="child" parent="t_Child">
    <property name="ABC" value="test"/>
</bean>

<bean id="parent" parent="t_Parent">
    <property name="items" ref="child"/>
</bean>
1 голос
/ 04 ноября 2010

Помимо других (в основном действительных) ответов и решений, я полагаю, что весной можно было бы использовать интерфейс BeanWrapper:

final BeanWrapper bw =
    new BeanWrapperImpl(applicationContext.getBean("parent"));
Object innerBean = bw.getPropertyValue("child");

Но я предполагаю, что подразумевается, что должен быть получательдля свойства (не только установщик).

Ссылка:

0 голосов
/ 04 ноября 2010

Если вы перейдете на Spring 3.x, вы сможете сделать это с помощью языка выражений Spring. Есть примеры прямой ссылки на свойство компонента из другого свойства (как в текст ссылки ). Код для этого из Java будет несколько похожим, хотя я не могу найти точный пример этого сценария.

Однако я бы сказал, что если вы пытаетесь использовать "getBean ()", вы делаете что-то не так. С таким же успехом вы могли бы использовать SpEL в своем контексте для определения свойства компонента или компонента, который ссылается на этот внутренний компонент.

...