Всем привет. Имеется большой проект, который состоит из модулей. Один из модулей это data-layer, то есть модуль для работы с БД. Сейчас пишу юнит тесты под данный модуль. Нашел очень красивое решение с помощью которого можно очень легко подпихивать тестовый контекст для тестов. Вот пример: | Код | public final class ApplicationProfiles {
public static final String DEVELOPMENT = "development";
public static final String TEST = "test";
public static final String PRODUCTION = "production";
private ApplicationProfiles() { }
}
|
| Код | @Configuration public class ApplicationConfig {
@Configuration @Profile( ApplicationProfiles.DEVELOPMENT ) @ImportResource(value = { "classpath:application-config.xml" }) static class DevelopmentEnvironmentConfiguration {
}
@Configuration @Profile( ApplicationProfiles.TEST ) @ImportResource(value = { "classpath:application-test-config.xml" }) static class TestEnvironmentConfiguration {
}
@Configuration @Profile( ApplicationProfiles.PRODUCTION ) @ImportResource(value = { "classpath:application-config.xml" }) static class ProductionEnvironmentConfiguration {
}
}
|
| Код | @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { ApplicationConfig.class }, loader = AnnotationConfigContextLoader.class) @ActiveProfiles( profiles = {ApplicationProfiles.TEST} ) public class MyTest { ... }
|
И теперь встал вопрос, как сделать в таком же виде загрузку "боевого" контекста и инициализацию какого нибудь static поля этим контекстом ? дело в том что у меня нет как такового main метода, это просто модуль ) Есть пару фабрик для получения нужных DAO классов и все. Можно было бы сделать как то так: | Код | private SpringContext() { try { context = new ClassPathXmlApplicationContext("application-config.xml"); } catch (Exception ex) { ex.printStackTrace(); } }
|
Но тогда теряется весь смысл профилей. В идеале я это вижу вот так: | Код | @ContextConfiguration( classes = ApplicationConfig.class, loader = AnnotationConfigContextLoader.class) @ActiveProfiles(profiles = {ApplicationProfiles.PRODUCTION}) public class SpringContext implements ApplicationContextAware{ ... @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; // set static context } }
|
Но в таком случае SpringContext должен быть бином и его кто то должен создать...
|