Конфигурация без XML для spring

#java #spring

#java #spring

Вопрос:

У меня есть следующий компонент конфигурации для не веб-приложения

 @Configuration
public class MyBeans {

    @Bean
    @Scope(value="prototype")
    MyObject myObject() {
        return new MyObjectImpl();
    }
}
  

С другой стороны, у меня есть свой класс

 public class MyCommand implements Command {

  @Autowired
  private MyObject myObject;

  [...]

}
  

Как я могу заставить myCommand автоматически подключаться к конфигурации в MyBeans без использования XML, чтобы я мог внедрять mocks в другие мои тестовые классы?

Заранее большое спасибо.

Ответ №1:

При конфигурации на основе XML вы бы использовали аннотацию ContextConfiguration. Однако аннотация ContextConfiguration, похоже, не работает с Java Config. Это означает, что вам придется вернуться к настройке контекста вашего приложения при инициализации теста.

Предполагая JUnit4:

 @RunWith(SpringJUnit4ClassRunner.class)
public class MyTest{

    private ApplicationContext applicationContext;

    @Before
    public void init(){
        this.applicationContext = 
            new AnnotationConfigApplicationContext(MyBeans.class);

            //not necessary if MyBeans defines a bean for MyCommand
            //necessary if you need MyCommand - must be annotated @Component
            this.applicationContext.scan("package.where.mycommand.is.located");
            this.applicationContext.refresh(); 

        //get any beans you need for your tests here
        //and set them to private fields
    }

    @Test
    public void fooTest(){
        assertTrue(true);
    }

}
  

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

1. В качестве альтернативы, вы можете просто передать MyCommand.class непосредственно в конструктор AnnotationConfigApplicationContext. Лично я бы выбрал то, что приведет к меньшему набору текста.

2. Это то, чего я пытался избежать, но после написания выглядит не так уж плохо. Большое спасибо.