Учебники

Весна — жизненный цикл бобов

Жизненный цикл бобов Spring легко понять. Когда создается экземпляр компонента, может потребоваться выполнить некоторую инициализацию, чтобы перевести его в работоспособное состояние. Точно так же, когда боб больше не требуется и вынимается из контейнера, может потребоваться некоторая очистка.

Хотя существуют списки действий, которые происходят за кулисами между моментом создания компонента и его уничтожением, в этой главе будут обсуждаться только два важных метода обратного вызова жизненного цикла компонента, которые необходимы во время инициализации компонента и его уничтожения.

Чтобы определить настройку и демонтаж для bean-компонента, мы просто объявляем <bean-компонент> с параметрами initmethod и / или destroy-method . Атрибут init-method указывает метод, который должен вызываться в bean-компоненте сразу после его создания. Аналогично, destroymethod определяет метод, который вызывается непосредственно перед удалением компонента из контейнера.

Инициализация обратных вызовов

Интерфейс org.springframework.beans.factory.InitializingBean указывает один метод —

void afterPropertiesSet() throws Exception;

Таким образом, вы можете просто реализовать описанный выше интерфейс, а инициализацию можно выполнить внутри метода afterPropertiesSet () следующим образом:

public class ExampleBean implements InitializingBean {
   public void afterPropertiesSet() {
      // do some initialization work
   }
}

В случае метаданных конфигурации на основе XML вы можете использовать атрибут init-method, чтобы указать имя метода, имеющего пустую подпись без аргументов. Например —

<bean id = "exampleBean" class = "examples.ExampleBean" init-method = "init"/>

Ниже приводится определение класса —

public class ExampleBean {
   public void init() {
      // do some initialization work
   }
}

Уничтожение колбэков

Интерфейс org.springframework.beans.factory.DisposableBean указывает один метод —

void destroy() throws Exception;

Таким образом, вы можете просто реализовать описанный выше интерфейс, а завершающая работа может быть выполнена внутри метода destroy () следующим образом:

public class ExampleBean implements DisposableBean {
   public void destroy() {
      // do some destruction work
   }
}

В случае метаданных конфигурации на основе XML вы можете использовать атрибут destroy-method, чтобы указать имя метода, имеющего пустую подпись без аргументов. Например —

<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>

Ниже приводится определение класса —

public class ExampleBean {
   public void destroy() {
      // do some destruction work
   }
}

Если вы используете IoC-контейнер Spring в среде без веб-приложений; например, в среде рабочего стола с расширенным клиентом вы регистрируете перехват выключения в JVM. Это гарантирует плавное завершение работы и вызывает соответствующие методы уничтожения для ваших одноэлементных компонентов, чтобы освободить все ресурсы.

Рекомендуется не использовать обратные вызовы InitializingBean или DisposableBean, потому что конфигурация XML дает большую гибкость с точки зрения именования вашего метода.

пример

Давайте создадим рабочую среду Eclipse и предпримем следующие шаги для создания приложения Spring:

меры Описание
1 Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint в папке src в созданном проекте.
2 Добавьте необходимые библиотеки Spring с помощью параметра « Добавить внешние JAR-файлы», как описано в главе « Пример Hello World» .
3 Создайте классы Java HelloWorld и 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.");
   }
}

Ниже приводится содержание файла 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>

</beans>

Как только вы закончили создавать файлы конфигурации исходного кода и bean-компонента, давайте запустим приложение Если с вашим приложением все в порядке, оно напечатает следующее сообщение:

Bean is going through init.
Your Message : Hello World!
Bean will destroy now.

Методы инициализации и уничтожения по умолчанию

Если у вас слишком много бинов, имеющих методы инициализации и / или уничтожения с одинаковыми именами, вам не нужно объявлять метод init и метод destroy для каждого отдельного компонента. Вместо этого платформа предоставляет гибкость для настройки такой ситуации с использованием атрибутов default-init-method и default-destroy-method для элемента <beans> следующим образом: