Измените мое сердце на свое сердце и глубоко помните друг друга.
Обзор
В этой главе мы узнаемSpring bean
жизненный цикл. владелецbean
Различные фазы жизненного цикла, методы обратного вызова инициализации и уничтожения. мы научимся использоватьXML
настроить и аннотировать конфигурацию для управленияbean
События жизненного цикла.
Цикл объявления бина
Когда контейнер запускается -- должен основываться наJava
илиXML
bean
определить инстанцированиеSpring bean
. Есть также некоторые шаги после инициализации, которые необходимо выполнить, чтобы привести его в пригодное для использования состояние.Spring Boot
Запуск приложения тоже самоеbean
Жизненный цикл.
После этого, когдаbean
, он будет изменен сIoC
удалены из контейнера.
Spring bean
factory
Отвечает за управление черезSpring
контейнер созданbean
жизненный цикл.
обратный вызов жизненного цикла
Spring bean
factory
контрольbean
созидание и разрушение. Для выполнения некоторых пользовательских операций он предоставляет методы обратного вызова, которые можно условно разделить на две категории:
-
Post-initialization
метод обратного вызова -
Pre-destruction
метод обратного вызова
Диаграмма жизненного цикла
Методы обратного вызова жизненного цикла
Spring
Фреймворк предоставляет следующие 4 метода управленияBean
События жизненного цикла:
-
InitializingBean
а такжеDisposableBean
интерфейс обратного вызова -
*Aware
Интерфейс предоставляет некоторые специальные реализации -
Bean
Настройка в конфигурационном файлеinit()
а такжеdestroy()
метод -
@PostConstruct
а также@PreDestroy
аннотация
InitializingBean
а такжеDisposableBean
интерфейс
org.springframework.beans.factory.InitializingBean
интерфейс позволяетbean
установить в контейнерbean
Работа по инициализации выполняется после всех необходимых свойств файла .
InitializingBean
Интерфейс определяет метод:
void afterPropertiesSet() throws Exception;
это не инициализацияbean
предпочтительный метод, потому что онbean
класс сspring
Контейнеры плотно соединены между собой. Лучший способ -applicationContext.xml
документbean
используется в определенииinit-method
Атрибуты.
Точно так же реализоватьorg.springframework.beans.factory.DisposableBean
интерфейс позволяетBean
Получите обратный вызов, когда контейнер, содержащий его, будет уничтожен.
DisposableBean
Интерфейс определяет метод:
void destroy() throws Exception;
// 实现上述接口的示例bean:
package cn.howtodoinjava.task;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class DemoBean implements InitializingBean, DisposableBean
{
//Other bean attributes and methods
@Override
public void afterPropertiesSet() throws Exception
{
//Bean initialization code
}
@Override
public void destroy() throws Exception
{
//Bean destruction code
}
}
*Aware
интерфейс
Spring
предоставляет ряд*Aware
интерфейс, позволяющийbean
Укажите контейнерам, что им нужна какая-то зависимость от инфраструктуры. Каждый интерфейс требует, чтобы вы реализовали метод для внедрения зависимостей.bean
.
Эти интерфейсы можно обобщить следующим образом:
*Aware интерфейс |
Метод переопределения | Цель |
---|---|---|
ApplicationContextAware |
void setApplicationContext (ApplicationContext applicationContext) throws BeansException; |
Интерфейс будет использоваться любым желающим запустить егоApplicationContext Уведомить объект, к которому он применяется. |
ApplicationEventPublisherAware |
void setApplicationEventPublisher (ApplicationEventPublisher applicationEventPublisher); |
установить этот объект для запускаApplicationEventPublisher . |
BeanClassLoaderAware |
void setBeanClassLoader (ClassLoader classLoader); |
Будуbean Загрузчик классов предоставляетbean обратный вызов экземпляра. |
BeanFactoryAware |
void setBeanFactory (BeanFactory beanFactory) throws BeansException; |
Отдайте собственные заводыBean обратный вызов экземпляра. |
BeanNameAware |
void setBeanFactory (BeanFactory beanFactory) throws BeansException; |
при создании этогоbean изbean заводская установкаbean Имя. |
BootstrapContextAware |
void setBootstrapContext (BootstrapContext bootstrapContext); |
Установите объект, в котором нужно запуститьBootstrapContext . |
LoadTimeWeaverAware |
void setLoadTimeWeaver (LoadTimeWeaver loadTimeWeaver); |
Установите этот объект, чтобы он содержалApplicationContext изLoadTimeWeaver . |
MessageSourceAware |
void setMessageSource (MessageSource messageSource); |
Устанавливает объект, в котором работает этот объектMessageSource . |
NotificationPublisherAware |
void setNotificationPublisher (NotificationPublisher notificationPublisher); |
Установить для текущего экземпляра управляемого ресурсаNotificationPublisher пример. |
PortletConfigAware |
void setPortletConfig (PortletConfig portletConfig); |
Объект, установленный для запускаPortletConfig . |
PortletContextAware |
void setPortletContext (PortletContext portletContext); |
Устанавливает объект, в котором работает этот объектPortletContext . |
ResourceLoaderAware |
void setResourceLoader (ResourceLoader resourceLoader); |
Устанавливает объект, в котором работает этот объектResourceLoader . |
ServletConfigAware |
void setServletConfig (ServletConfig servletConfig); |
Устанавливает запущенный объектServletConfig . |
ServletContextAware |
void setServletContext (ServletContext servletContext); |
Устанавливает запущенный объектServletContext . |
последующийJava
Блок кода показывает использование*Aware
интерфейс для управленияbean
Использование жизненного цикла.
package cn.howtodoinjava.task;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.weaving.LoadTimeWeaverAware;
import org.springframework.core.io.ResourceLoader;
import org.springframework.instrument.classloading.LoadTimeWeaver;
import org.springframework.jmx.export.notification.NotificationPublisher;
import org.springframework.jmx.export.notification.NotificationPublisherAware;
public class DemoBean implements ApplicationContextAware,
ApplicationEventPublisherAware, BeanClassLoaderAware, BeanFactoryAware,
BeanNameAware, LoadTimeWeaverAware, MessageSourceAware,
NotificationPublisherAware, ResourceLoaderAware
{
@Override
public void setResourceLoader(ResourceLoader arg0) {
// TODO Auto-generated method stub
}
@Override
public void setNotificationPublisher(NotificationPublisher arg0) {
// TODO Auto-generated method stub
}
@Override
public void setMessageSource(MessageSource arg0) {
// TODO Auto-generated method stub
}
@Override
public void setLoadTimeWeaver(LoadTimeWeaver arg0) {
// TODO Auto-generated method stub
}
@Override
public void setBeanName(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void setBeanFactory(BeanFactory arg0) throws BeansException {
// TODO Auto-generated method stub
}
@Override
public void setBeanClassLoader(ClassLoader arg0) {
// TODO Auto-generated method stub
}
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher arg0) {
// TODO Auto-generated method stub
}
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
// TODO Auto-generated method stub
}
}
настроитьinit()
а такжеdestroy()
метод
bean
по умолчанию в конфигурационном файлеinit
а такжеdestroy
Существует два способа определения методов:
- относится к одному
Bean
изBean
местное определение - Глобальное определение относится к
bean
все определено в контекстеbean
Bean
местное определение
Местные определения следующие:
<beans>
<bean id="demoBean" class="com.howtodoinjava.task.DemoBean"
init-method="customInit"
destroy-method="customDestroy"></bean>
</beans>
глобальное определение
Глобально определенные следующим образом, методы будут<beans>
Все отдано под тегомbean
Определить вызов. Когда у вас есть конфигурация, которую можно использовать для всехbean
Определите общие имена методов (например,init()
а такжеdestroy(
)) это практично. помогает вам не нужноbean
одно упоминаниеinit
а такжеdestroy
метод.
<beans default-init-method="customInit" default-destroy-method="customDestroy">
<bean id="demoBean" class="com.howtodoinjava.task.DemoBean"></bean>
</beans>
Java
Пример кода программы:
package cn.howtodoinjava.task;
public class DemoBean
{
public void customInit()
{
System.out.println("Method customInit() invoked...");
}
public void customDestroy()
{
System.out.println("Method customDestroy() invoked...");
}
}
@PostConstruct
а также@PreDestroy
аннотация
отSpring 2.5
Для начала вы также можете использовать аннотации для передачи@PostConstruct
а также@PreDestroy
Аннотации определяют методы жизненного цикла.
-
@PostConstruct
Аннотированные методы будут созданы с использованием конструктора по умолчанию.bean
Вызывается после и до того, как его экземпляр будет возвращен объекту запроса. -
@PreDestroy
Метод аннотации вbean
вскореbean
Вызывается перед уничтожением контейнера.
Java
Пример кода выглядит следующим образом:
package cn.howtodoinjava.task;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class DemoBean
{
@PostConstruct
public void customInit()
{
System.out.println("Method customInit() invoked...");
}
@PreDestroy
public void customDestroy()
{
System.out.println("Method customDestroy() invoked...");
}
}
В общем, все это связано сSpring
внутри контейнераSpring
bean
Жизненный цикл.记住给定的生命周期事件类型,这是Spring
Часто задаваемые вопросы в интервью.
Оригинальная ссылка:Весна 5 — прицелы Bean