Spring - постпроцессоры Bean
В BeanPostProcessor interface определяет методы обратного вызова, которые вы можете реализовать для предоставления вашей собственной логики создания экземпляров, логики разрешения зависимостей и т. д. Вы также можете реализовать некоторую пользовательскую логику после того, как контейнер Spring завершит создание экземпляра, настройку и инициализацию bean-компонента, подключив одну или несколько реализаций BeanPostProcessor .
Вы можете настроить несколько интерфейсов BeanPostProcessor, и вы можете контролировать порядок, в котором эти интерфейсы BeanPostProcessor выполняются, установив параметр order свойство при условии, что BeanPostProcessor реализует Ordered интерфейс.
BeanPostProcessors работают с экземплярами bean (или объекта), что означает, что контейнер Spring IoC создает экземпляр bean-компонента, а затем интерфейсы BeanPostProcessor выполняют свою работу.
An ApplicationContext автоматически обнаруживает любые bean-компоненты, которые определены с реализацией BeanPostProcessor интерфейс и регистрирует эти bean-компоненты как постпроцессоры, которые затем соответствующим образом вызываются контейнером при создании bean-компонента.
пример
В следующих примерах показано, как писать, регистрировать и использовать BeanPostProcessors в контексте ApplicationContext.
Разрешите нам иметь рабочую среду IDE Eclipse и предпринять следующие шаги для создания приложения Spring:
Шаги | Описание |
---|---|
1 | Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint подsrc папку в созданном проекте. |
2 | Добавьте необходимые библиотеки Spring с помощью опции « Добавить внешние JAR», как описано в главе « Пример Spring Hello World» . |
3 | Создайте классы Java HelloWorld , InitHelloWorld и MainApp в пакете com.tutorialspoint . |
4 | Создайте файл конфигурации Beans Beans.xml подsrc папка. |
5 | Последним шагом является создание содержимого всех файлов Java и файла конфигурации компонента и запуск приложения, как описано ниже. |
Вот содержание HelloWorld.java файл -
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.");
}
}
Это очень простой пример реализации BeanPostProcessor, который печатает имя bean-компонента до и после инициализации любого bean-компонента. Вы можете реализовать более сложную логику до и после инициализации компонента, потому что у вас есть доступ к объекту компонента внутри обоих методов постпроцессора.
Вот содержание InitHelloWorld.java файл -
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
}
}
Ниже приводится содержание MainApp.javaфайл. Здесь нужно зарегистрировать хук выключенияregisterShutdownHook(), объявленный в классе AbstractApplicationContext. Это обеспечит плавное завершение работы и вызовет соответствующие методы уничтожения.
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();
}
}
Ниже приведен файл конфигурации Beans.xml требуется для методов init и destroy -
<?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>
Когда вы закончите создание исходного файла и файлов конфигурации bean-компонента, позвольте нам запустить приложение. Если с вашим приложением все в порядке, оно напечатает следующее сообщение -
BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.