Как интерфейс Lifecycle работает в Spring? Что такое «синглтон-бобы верхнего уровня»?
Весной сказано, что "Обратите внимание, что интерфейс жизненного цикла поддерживается только на одноэлементных компонентах верхнего уровня. " ВотURL
мойLifecycleBeanTest.xml
описывает бин следующим образом:
так выглядитtopish» а также "singletonish» довольно.
Что это значит? Как сообщить Spring о реализации моего компонентаLifecycle
и сделать что-нибудь с этим?
Предположим, мой основной метод выглядит следующим образом весной
public static void main(String[] args) {
new ClassPathXmlApplicationContext("/tests/LifecycleBeanTest.xml").close();
}
Таким образом, он создает экземпляр контекста, а затем немедленно закрывает его.
Могу ли я создать бин в моей конфигурации, что задерживаетclose()
выполнение, пока приложение не сделает все этос работает? Так что основной метод потока ожидает завершения приложения?
Например, следующий компонент не работает так, как я думал. ниstart()
неstop()
называется.
package tests;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.Lifecycle;
public class LifecycleBean implements Lifecycle {
private static final Logger log = LoggerFactory.getLogger(LifecycleBean.class);
private final Thread thread = new Thread("Lifecycle") {
{
setDaemon(false);
setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
log.error("Abnormal thread termination", e);
}
});
}
public void run() {
for(int i=0; i