Как автоматически связывать Spring Beans без контекста приложения
Я хотел бы иметь возможность использовать bean-компонент через автоматическое подключение без непосредственного использования ApplicationContext. Ниже приведен пример того, что я хотел бы сделать.
Класс конфигурации
@Configuration
public class CoffeeConfig
{
@Bean
public CoffeeMachine provideCoffeeMachine()
{
return new CoffeeMachine(provideCoffeeBean());
}
@Bean
public CoffeeBean provideCoffeeBean()
{
return new CoffeeBean(Type.BEST);
}
}
Кофейня Класс
@Component
public class CoffeeShop
{
@Autowired
private CoffeeMachine cMachine;
public void pourCoffee()
{
System.out.print("Pouring cup of coffee: " + cMachine.pour(Amount.8OZ));
}
}
Чтобы решить эту проблему, я перечитывал документацию и учебные пособия по Spring. Проблема в том, что я не видел никого, кто бы пытался проиллюстрировать, как сделать что-то столь же простое, как это, и когда они это делают, они в итоге прибегают к использованию контекста приложения. При этом я знаю, что если я запускаю модульные тесты в Spring, я могу сделать следующее:
Тестовый класс
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CoffeeConfig.class, loader=AnnotationConfigContextLoader.class)
public class SpringIOCTests
{
@Autowired
public CoffeeMachine cMachine;
@Test
public void influxDevTest()
{
assertEquals(Type.BEST, cMachine.getBeans());
}
}
То, как это настраивается, заставляет меня полагать, что использование автоматического подключения таким способом должно быть достижимо в реальном приложении вместо использования этих зависимостей только для тестирования, таких как ContextConfiguration. Должен также отметить, что этот юнит-тест проходит успешно.
Предлагает ли Spring методологию, в которой можно автоматически и автоматически подключать зависимости, избегая прямого использования контекстов приложения?