Использование Spring 3.0.x, я столкнулся с проблемой, когда запущен Bean init-method, и как часть его извлекает некоторую информацию, а затем в другой поток (исходный поток init() ожидает других потоков для complete) пытается получить один или несколько Beans на основе этой информации. Проблема в том, что эти другие Бобы являются одноэлементными и еще не инициализированы. В методах getSingleton() есть синхронизированный() блок в DefaultSingletonBeanRegistry.Как запустить метод после завершения инициализации синглэна Spring?
Проблема заключается в том, что я пытаюсь получить/инициализировать Bean, пока я в настоящее время инициализирую Bean, поэтому я застрял в основном потоке в методе init(), а другой поток пытается получить еще один синглтон Bean, и заблокирован, потому что у 1-го потока есть блокировка.
Итак, как я понимаю, у меня есть 2 варианта:
1) Получить Spring запустить метод ПОСЛЕ одноточечно был полностью создан, который выполняет выборку фактических данных и обработки 2) Придумайте сообщение, которое передает данные обратно в основной поток, а затем обрабатывать их все внутри него, поскольку он уже имеет блокировку монитора.
Мысли? Идеи? Как я получу # 1?
Являются ли одиночные игры ленивыми или нет?Вы знакомы с этими зависимостями раньше, или они получены в методе init на основе некоторых вычислений? –
Нет, они не настроены на ленивую загрузку, и я не знаю, какие зависимости находятся во время компиляции, потому что они исходят из вызова API, который выполняется во время вызова init(). – Drizzt321