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);
Другие вопросы по тегам