No bean named 'beanName' available, не видит @Bean

Ошибка здесь:

Book warAndPiece = context.getBean("warAndPiece", Book.class);

Создание объекта context чуть ранее(все в main(String[] args)):

ApplicationContext context = new ClassPathXmlApplicationContext("instantiation.xml");

instantiation.xml подключает аннотации:

<context:annotation-config/>

Сам @Bean:

@Bean
public Book warAndPiece(@Qualifier("warAndPieceBrochure")Brochure brochure) { // it is not recommended to set qualifier as id!
    return new Book(3000, "War and Piece", "Tolstoy", brochure);
}

Он в классе Book, который аннотирован как содержащий @Bean'ы:

@Configuration
public class Book {
    ...
}

Полный код ошибки:

org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'warAndPiece' available

Все, что нужно, на первый взгляд, прописано. Что я упускаю?


Дополнение:
Попробовал сделать тестовый класс конфигурации с @Bean в том же пакете, что и класс Main:

@Configuration
public class TestBeanConf {
    @Bean
    public TestBeanConf testBean() {
        return new TestBeanConf();
    }
}

На строке

context.getBean("testBean");

Кидает аналогичную ошибку.


Ответы (3 шт):

Автор решения: dmtr

Бин warAndPiece можно инжектить через конструктор или Autowired.

Например:

@Component 
// или @Service
class InjectBook {

  @Autowired
  private final Book warAndPiece; // то есть явно указываете идентичное имя бина
}

Или

@Component 
// или @Service
class InjectBook {

  @Autowired
  private final ApplicationContext context;
  Book book = context.getBean("warAndPiece");
}
→ Ссылка
Автор решения: OlegFrolOff

Аннотацией @Configuration помечается класс, в котором создаётся бин, а не в котором он описывается. Класс, содержащий метод

@Bean
public Book warAndPiece(@Qualifier("warAndPieceBrochure")Brochure brochure) { // it is not recommended to set qualifier as id!
    return new Book(3000, "War and Piece", "Tolstoy", brochure);
}

Помечен как @Configuration ?

Также, мне кажется, нужно @Autowired использовать с квалифаером.

→ Ссылка
Автор решения: Miron

Смена

 <context:annotation-config/>

на

<context:component-scan base-package="ru.miron"/>

помогла. Все подключилось.

→ Ссылка