Аналог ref в spring @Configuration

121
19 декабря 2020, 01:00

@Configuration позволяет внутренние зависимости. Означает ли это, что вызвав метод создания одного бина из другого, можно сымитировать поведение атрибута ref тега <property> в xml конфигурации?

@Bean( "bean1" )
public Bean1 bean1() {
  Bean1 bean1 = new Bean1();
  bean1.setBean2(bean2());
  return bean1;
}
@Bean( "bean2" )
public Bean2 bean2() { return new Bean2(); }

Равнозначно ли тому же в xml

<bean id="bean1" class="Bean1">
  <property name="bean2" ref="bean2"/>
</bean>
<bean id="bean2" calss="Bean2"/>

Или же для того чтобы добиться такого же результата как в xml нужно использовать другой подход?

Answer 1
@Bean( "bean1" )
public Bean1 bean1() { return new Bean1(); }
@Bean( "bean2" )
public Bean2 bean2() { return new Bean2(); }
@Component
public class Bean1 {
    @Autowired
    priavate Bean2 bean2;
}

либо же, если черет сеттер

@Component
public class Bean1 {
    priavate Bean2 bean2;
    @Autowired
    public void setBean2(Bean2 bean2) {
        this.bean2 = bean2;
    }
}
Answer 2

Думаю этот вариант будет ближе к вашему конфигу xml:

@Bean( "bean1" )
public Bean1 bean1(Bean2 bean2) {
  Bean1 bean1 = new Bean1();
  bean1.setBean2(bean2);
  return bean1;
}
@Bean( "bean2" )
public Bean2 bean2() { return new Bean2(); }

Т.е. когда у метода есть параметры спринг ищет подходящий компонент в своём контексте и сам подставляет. Если не сможет найти, то кинет исключение.

READ ALSO
Как в JSP вывести одну из трех таблиц

Как в JSP вывести одну из трех таблиц

Подскажите, а то уже всю голову сломал! Задача: У меня есть три таблицы, с помощью "поля со списком" я должен выбрать одну из них и в цикле вывести:

111
Выводить дату на английском

Выводить дату на английском

Выводит четверг, а надо на английском

109
Яндекс карты. Маршрутизация

Яндекс карты. Маршрутизация

Как получить координаты точки B(конечная точка) используя панель маршрутизацииПо примеру из песочницы

123