Как указать свойство "id" бина в Spring? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть класс MyBean с некоторыми полями, включая строку "id". У меня много бобов класса MyBean и у них есть идентификаторы. Я хочу установить в полях «id» объектов MyBean идентификаторы бинов. Как реализовать это без дублирования кода?

package just.artmmslv.example.MyBean
public class MyBean {
    private int id;
    private String foo;
//getters, setters, other fields
}

<beans xmlns="foobar+util">
    <util:list value-type="just.artmmslv.example.MyBean">
       <bean id="exampleBean01" class="just.artmmslv.example.MyBean">
           <property name="foo" value="bar"/>
       </bean>
       <!--Other beans-->
    </util:list>
</beans>

Итак, как сделать идентификатор поля exampleBean01 удобным и равным «exampleBean01»?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Создайте идентификатор в MyBean типа String, а не int (я вижу int в вашем коде)

Make MyBean реализует BeanNameAware

Реализуйте метод setBeanName в MyBean:

@Override
public void setBeanName(String s) {
    this.id = s;
}

Это все, что вам нужно

0 голосов
/ 13 февраля 2020

Я думаю, что Spring предоставляет способ сделать это через BeanNameAware. Прочитайте: https://docs.spring.io/spring/docs/2.5.x/reference/beans.html#beans -factory-aware-beannameaware

Интерфейс для реализации bean-компонентами, которые хотят знать свое имя bean-компонента на фабрике bean-компонентов. Обратите внимание, что обычно не рекомендуется, чтобы объект зависел от имени его бина, поскольку это представляет потенциально хрупкую зависимость от внешней конфигурации, а также, возможно, ненужную зависимость от Spring API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...