#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);
}