Po zakończeniu aplikacji chcę zamknąć kontekst wiosenny.
Odpowiedni kod ma ApplicationContextodniesienie, ale nie mogłem znaleźć closemetody.
Po zakończeniu aplikacji chcę zamknąć kontekst wiosenny.
Odpowiedni kod ma ApplicationContextodniesienie, ale nie mogłem znaleźć closemetody.
Odpowiedzi:
Downcast your ApplicationContextto ConfigurableApplicationContextwhich defines close()method:
((ConfigurableApplicationContext)appCtx).close();
AbstractApplicationContextjest to klasa i ConfigurableApplicationContextjest interfejsem zaimplementowanym przez tę klasę, w większości przypadków prawdopodobnie lepiej jest używać tej drugiej.
ConfigurableApplicationContextteraz rozciąga Closable(nie wiem, która wersja ta zmiana została dokonana w, ale docs dla 4.2.x pokazują, że podczas gdy 3.0.x nie) znacznie krótsza wersja jest ((Closable)context).close();.
AutoCloseableimplementacja, co oznacza, że można teraz użyć AutoCloseabletry (ConfigurableApplicationContext context = new ....) { /* your code goes here */ } // context is closed when you leave the try block
Musisz zarejestrować punkt zaczepienia zamykania w JVM, jak pokazano poniżej:
((AbstractApplicationContext)appCtx).registerShutdownHook();
Aby uzyskać więcej informacji, zobacz: Podręcznik Spring: 3.6.1.6 Bezpieczne zamykanie kontenera Spring IoC w aplikacjach innych niż internetowe
Jeśli zainicjujesz kontekst jak poniżej
ApplicationContext context = new ClassPathXmlApplicationContext(beansXML);
czysty kontekst, taki jak te
((ClassPathXmlApplicationContext) context).close();
Jeśli Java SE 7 i nowsze wersje , nie zamykaj, użyj try-with-resources, co zapewni, że każdy zasób zostanie zamknięty na końcu instrukcji.
try(final AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"classpath*:META-INF/spring/*.xml" }))
{
//write your code
}
Kroki, aby zamknąć ApplicationContextobiekt
ApplicationContextobiekt do ConfigurableApplicationContextobiektu.przykład:
ApplicationContext context = new ClassPathXmlApplicationContext("mybeans.xml");
((ConfigurableApplicationContext)context ).close();
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("SpringCnf.xml");
Resturant rstro1=(Resturant)context.getBean("resturantBean");
rstro1.setWelcome("hello user");
rstro1.welcomeNote();
((ClassPathXmlApplicationContext) context).close();
AbstractApplicationContext