Po zakończeniu aplikacji chcę zamknąć kontekst wiosenny.
Odpowiedni kod ma ApplicationContext
odniesienie, ale nie mogłem znaleźć close
metody.
85
Downcast your ApplicationContext
to ConfigurableApplicationContext
which defines close()
method:
((ConfigurableApplicationContext)appCtx).close();
AbstractApplicationContext
AbstractApplicationContext
jest to klasa iConfigurableApplicationContext
jest interfejsem zaimplementowanym przez tę klasę, w większości przypadków prawdopodobnie lepiej jest używać tej drugiej.ConfigurableApplicationContext
teraz rozciągaClosable
(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();
.AutoCloseable
implementacja, co oznacza, że można teraz użyćAutoCloseable
try (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:
Aby uzyskać więcej informacji, zobacz: Podręcznik Spring: 3.6.1.6 Bezpieczne zamykanie kontenera Spring IoC w aplikacjach innych niż internetowe
źródło
Jeśli zainicjujesz kontekst jak poniżej
ApplicationContext context = new ClassPathXmlApplicationContext(beansXML);
czysty kontekst, taki jak te
źródło
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 }
źródło
Kroki, aby zamknąć
ApplicationContext
obiektApplicationContext
obiekt doConfigurableApplicationContext
obiektu.przykład:
ApplicationContext context = new ClassPathXmlApplicationContext("mybeans.xml"); ((ConfigurableApplicationContext)context ).close();
źródło
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();
źródło