Интерфейс BeanPostProcessor определяет методы обратного вызова, которые вы можете реализовать, чтобы обеспечить собственную логику создания экземпляров, логику разрешения зависимостей и т. Д. Вы также можете реализовать некоторую настраиваемую логику после того, как контейнер Spring завершит создание, настройку и инициализацию компонента, подключив один или несколько Реализации BeanPostProcessor.
Вы можете настроить несколько интерфейсов BeanPostProcessor и управлять порядком, в котором эти интерфейсы BeanPostProcessor выполняются, установив свойство order при условии, что BeanPostProcessor реализует интерфейс Ordered .
BeanPostProcessors работают с экземплярами компонента (или объекта), что означает, что контейнер Spring IoC создает экземпляр компонента, а затем интерфейсы BeanPostProcessor выполняют свою работу.
ApplicationContext автоматически обнаруживает любые bean-компоненты, определенные с помощью реализации интерфейса BeanPostProcessor, и регистрирует эти bean-компоненты как постпроцессоры, которые затем будут соответствующим образом вызываться контейнером при создании bean-компонента.
пример
В следующих примерах показано, как писать, регистрировать и использовать BeanPostProcessors в контексте ApplicationContext.
Давайте создадим рабочую среду Eclipse и предпримем следующие шаги для создания приложения Spring:
меры | Описание |
---|---|
1 | Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint в папке src в созданном проекте. |
2 | Добавьте необходимые библиотеки Spring с помощью параметра « Добавить внешние JAR-файлы», как описано в главе « Пример Hello World» . |
3 | Создайте классы Java HelloWorld , InitHelloWorld и MainApp в пакете com.tutorialspoint . |
4 | Создайте файл конфигурации Beans Beans.xml в папке src . |
5 | Последний шаг — создать содержимое всех файлов Java и файла конфигурации Bean и запустить приложение, как описано ниже. |
Вот содержимое файла 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, который печатает имя компонента до и после инициализации любого компонента. Вы можете реализовать более сложную логику до и после инициализации компонента, поскольку у вас есть доступ к объекту компонента внутри обоих методов постпроцессора.
Вот содержимое файла 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 . Здесь вам нужно зарегистрировать метод hookSdowndownStoreShutdownHook (), который объявлен в классе 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-компонента, давайте запустим приложение. Если с вашим приложением все в порядке, оно напечатает следующее сообщение: