Весна - жизненный цикл фасоли

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

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

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

Обратные вызовы инициализации

Интерфейс 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 дает большую гибкость с точки зрения наименования вашего метода.

пример

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

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

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

</beans>

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

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

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

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

<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>