ApplicationContextInitializer в не-веб-контексте Spring?
Я создал ApplicationContextInitializer
реализация для загрузки свойств из обычного источника (ZooKeeper) и добавления их в ApplicationContext
список источников недвижимости.
Вся документация, которую я могу найти, относится к веб-приложениям Spring, но я хочу использовать ее в автономном приложении, использующем сообщения.
Правильный ли подход для реализации моей реализации, создания контекста и передачи контекста моей реализации "вручную"? Или я пропускаю некоторую автоматическую функцию для фреймворка, который будет применять мой инициализатор к моему контексту?
3 ответа
Я обнаружил, что достаточно просто реализовать стратегию SpringMVC по инициализации контекста путем инициализации с пустым контекстом. В обычных контекстах приложения нет ничего, что использует ApplicationContextInitializer, поэтому вы должны выполнить его самостоятельно.
Нет проблем, хотя, поскольку в обычном приложении J2SE, если у вас есть владение блоком загрузчика контекста, у вас будет доступ ко всем этапам жизненного цикла.
// Create context, but dont initialize with configuration by calling
// the empty constructor. Instead, initialize it with the Context Initializer.
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
MyAppContextInitializer initializer = new MyAppContextInitializer();
initializer.initialize( ctx );
// Now register with your standard context
ctx.register( com.my.classpath.StackruConfiguration.class );
ctx.refresh()
// Get Beans as normal (e.g. Spring Batch)
JobLauncher launcher = context.getBean(JobLauncher.class);
Надеюсь, это поможет!
Если я правильно понимаю проблему, вы можете найти решение в разделе документации Spring в разделе 4. Контейнер IoC
Пример того, как запустить ваше приложение, находится здесь - 4.2.2 Создание контейнера
Также взгляните на 5.7 Контексты приложений и пути к ресурсам.
Не уверен насчет других версий, но в Spring 4:
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(yourConfig.class);