Wiosna - postprocesory fasoli
Plik BeanPostProcessor interfejs definiuje metody wywołania zwrotnego, które można zaimplementować w celu zapewnienia własnej logiki tworzenia instancji, logiki rozwiązywania zależności itp. Można również zaimplementować niestandardową logikę po zakończeniu tworzenia instancji, konfigurowania i inicjowania komponentu przez kontener Springa przez podłączenie jednej lub więcej implementacji BeanPostProcessor .
Możesz skonfigurować wiele interfejsów BeanPostProcessor i możesz kontrolować kolejność, w jakiej te interfejsy BeanPostProcessor są wykonywane, ustawiając order pod warunkiem, że BeanPostProcessor implementuje Ordered berło.
BeanPostProcessors działają na instancjach bean (lub object), co oznacza, że kontener Spring IoC tworzy instancję bean, a następnie interfejsy BeanPostProcessor wykonują swoją pracę.
Na ApplicationContext automatycznie wykrywa wszystkie ziarna, które są zdefiniowane za pomocą implementacji BeanPostProcessor interfejs i rejestruje te ziarna jako postprocesory, aby były następnie odpowiednio wywoływane przez kontener po ich utworzeniu.
Przykład
Poniższe przykłady pokazują, jak pisać, rejestrować i używać BeanPostProcessors w kontekście ApplicationContext.
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 , InitHelloWorld 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.");
}
}
To jest bardzo podstawowy przykład implementacji BeanPostProcessor, który wypisuje nazwę komponentu bean przed i po inicjalizacji dowolnego komponentu bean. Możesz zaimplementować bardziej złożoną logikę przed i po zainicjowaniu komponentu bean, ponieważ masz dostęp do obiektu bean wewnątrz obu metod postprocesora.
Oto treść InitHelloWorld.java plik -
package com.tutorialspoint;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.BeansException;
public class InitHelloWorld implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("BeforeInitialization : " + beanName);
return bean; // you can return any other object as well
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("AfterInitialization : " + beanName);
return bean; // you can return any other object as well
}
}
Poniżej znajduje się zawartość MainApp.javaplik. Tutaj musisz zarejestrować hak zamykającyregisterShutdownHook()metoda zadeklarowana w klasie AbstractApplicationContext. Zapewni to bezpieczne zamknięcie systemu i wywoła odpowiednie metody 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>
<bean class = "com.tutorialspoint.InitHelloWorld" />
</beans>
Gdy skończysz tworzyć pliki źródłowe i konfiguracyjne bean, uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat -
BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.