Wiosna - cykl życia fasoli
Cykl życia fasoli wiosennej jest łatwy do zrozumienia. Podczas tworzenia wystąpienia komponentu bean może być konieczne wykonanie pewnej inicjalizacji, aby uzyskać stan nadający się do użytku. Podobnie, gdy ziarno nie jest już potrzebne i jest wyjmowane z pojemnika, może być wymagane pewne czyszczenie.
Chociaż istnieją listy działań, które mają miejsce za kulisami między momentem instancji fasoli a jej zniszczeniem, w tym rozdziale omówimy tylko dwie ważne metody wywołania zwrotnego cyklu życia fasoli, które są wymagane w momencie inicjalizacji fasoli i jej zniszczenia.
Aby zdefiniować konfigurację i dezaktywację fasoli, po prostu deklarujemy <fasola> z initmethod i / lub destroy-methodparametry. Atrybut init-method określa metodę, która ma zostać wywołana w komponencie bean natychmiast po utworzeniu instancji. Podobnie destroymethod określa metodę, która jest wywoływana tuż przed usunięciem ziarna z kontenera.
Inicjalizacja wywołań zwrotnych
Interfejs org.springframework.beans.factory.InitializingBean określa jedną metodę -
void afterPropertiesSet() throws Exception;
W ten sposób możesz po prostu zaimplementować powyższy interfejs, a prace inicjalizacyjne można wykonać wewnątrz metody afterPropertiesSet () w następujący sposób -
public class ExampleBean implements InitializingBean {
public void afterPropertiesSet() {
// do some initialization work
}
}
W przypadku metadanych konfiguracji opartych na XML można użyć rozszerzenia init-methodatrybut, aby określić nazwę metody, która ma nieważną sygnaturę bez argumentów. Na przykład -
<bean id = "exampleBean" class = "examples.ExampleBean" init-method = "init"/>
Poniżej znajduje się definicja klasy -
public class ExampleBean {
public void init() {
// do some initialization work
}
}
Callback zniszczenia
Org.springframework.beans.factory.DisposableBean interfejs określa jedną metodę -
void destroy() throws Exception;
W ten sposób możesz po prostu zaimplementować powyższy interfejs, a prace finalizacyjne można wykonać wewnątrz metody zniszcz () w następujący sposób -
public class ExampleBean implements DisposableBean {
public void destroy() {
// do some destruction work
}
}
W przypadku metadanych konfiguracji opartych na XML można użyć rozszerzenia destroy-methodatrybut, aby określić nazwę metody, która ma nieważną sygnaturę bez argumentów. Na przykład -
<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>
Poniżej znajduje się definicja klasy -
public class ExampleBean {
public void destroy() {
// do some destruction work
}
}
Jeśli używasz kontenera IoC Springa w środowisku aplikacji innych niż sieci web; na przykład w bogatym środowisku pulpitu klienta rejestruje się punkt zaczepienia zamykania w maszynie JVM. Zapewnia to bezpieczne zamknięcie i wywołuje odpowiednie metody niszczenia w komponentach bean singleton, dzięki czemu wszystkie zasoby zostaną zwolnione.
Zaleca się, aby nie używać wywołań zwrotnych InitializingBean ani DisposableBean, ponieważ konfiguracja XML zapewnia dużą elastyczność pod względem nazewnictwa metody.
Przykład
Przygotujmy działające środowisko Eclipse IDE i wykonaj następujące czynności, aby utworzyć aplikację Spring -
Kroki | Opis |
---|---|
1 | Utwórz projekt o nazwie SpringExample i utwórz pakiet com.tutorialspoint w obszarzesrc folder w utworzonym projekcie. |
2 | Dodaj wymagane biblioteki Spring za pomocą opcji Dodaj zewnętrzne pliki JAR , jak wyjaśniono w rozdziale Spring Hello World Example . |
3 | Utwórz klasy Java HelloWorld i MainApp w pakiecie com.tutorialspoint . |
4 | Utwórz plik konfiguracyjny Beans Beans.xml w obszarzesrc teczka. |
5 | Ostatnim krokiem jest utworzenie zawartości wszystkich plików Java i pliku konfiguracyjnego Bean i uruchomienie aplikacji, jak wyjaśniono poniżej. |
Oto treść HelloWorld.java plik -
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
public void init(){
System.out.println("Bean is going through init.");
}
public void destroy() {
System.out.println("Bean will destroy now.");
}
}
Poniżej znajduje się zawartość MainApp.javaplik. Tutaj musisz zarejestrować hak zamykającyregisterShutdownHook()metoda zadeklarowana w klasie AbstractApplicationContext. Zapewni to bezpieczne zamknięcie i wywołanie odpowiednich metod niszczenia.
package com.tutorialspoint;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
context.registerShutdownHook();
}
}
Poniżej znajduje się plik konfiguracyjny Beans.xml wymagane do inicjowania i niszczenia metod -
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" init-method = "init"
destroy-method = "destroy">
<property name = "message" value = "Hello World!"/>
</bean>
</beans>
Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat -
Bean is going through init.
Your Message : Hello World!
Bean will destroy now.
Domyślna inicjalizacja i niszczenie metod
Jeśli masz zbyt wiele fasoli z inicjalizacją i / lub niszczeniem metod o tej samej nazwie, nie musisz deklarować init-method i destroy-methodna każdej fasoli. Zamiast tego framework zapewnia elastyczność konfiguracji takiej sytuacji przy użyciudefault-init-method i default-destroy-method atrybuty elementu <beans> w następujący sposób -
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
default-init-method = "init"
default-destroy-method = "destroy">
<bean id = "..." class = "...">
<!-- collaborators and configuration for this bean go here -->
</bean>
</beans>