Весна - жизненный цикл фасоли
Жизненный цикл 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>