Необходимо ли в классе @Configuration автоматически подключать @Bean для использования в этом классе?

#java #spring #spring-bean

#java #весна #spring-bean

Вопрос:

В классе с @Configuration аннотацией, который имеет метод с @Bean аннотацией, необходимо ли иметь @Autowired поле с тем же именем, что и у компонента, чтобы использовать его в этом же классе? Поскольку класс configuration создал компонент, не должен ли он иметь немедленный доступ к нему, вызывая метод напрямую?

Например:

 @Configuration
public class ConfigClass
{
    @Autowired
    private BeanForSomething beanForSomething;

    @Bean
    public BeanForSomething beanForSomething()
    {
        return new BeanForSomething();
    }

    private void methodThatUsesBean()
    {
        beanForSomething.doSomething();
    }
}
  

Разве нельзя оставить @Autowired поле и просто вызвать beanForSomething().doSomething(); , чтобы использовать компонент? Возможно, я неправильно понимаю использование @Bean аннотации.

Ответ №1:

Нет, @Bean объявление уже позаботится об этом. Вам просто нужно вызвать beanForSomething() methodThatUsesBean()

Комментарии:

1. Почему это так? Я думаю, это создало бы два разных экземпляра. Это где-то упоминается в документах Spring?

Ответ №2:

Как сказал предыдущий ответчик, вы можете использовать

 private void methodThatUsesBean()
{
    beanForSomething().doSomething();
}
  

Но в случае создания другого компонента вы можете использовать параметр метода

 @Bean
public BeanForSomething beanForSomething()
{
    return new BeanForSomething();
}

@Bean
public SecondBean secondBean(BeanForSomething beanForSomething)
{
     return new SecondBean(beanForSomething);
}