Spring生命周期
在Spring框架中,Bean的生命周期指的是从Bean的创建到销毁的整个过程。这个过程包括了多个阶段,每个阶段都有特定的操作。下面是一个典型的Spring Bean生命周期的概述:
一. 实例化(Instantiation)
当Spring容器启动时,它会根据配置文件或注解创建Bean实例。
二. 属性赋值(Populate Properties)
Spring会通过setter方法或其他注入方式(如构造器注入)将依赖注入到Bean的属性中。
三. 属性赋值(Populate Properties)
3.1 设置Bean名称和Bean引用(Set Bean Name and Bean Reference)
Spring会调用setBeanName()
方法设置Bean的名称,并调用setBeanFactory()
方法设置BeanFactory的引用(如果有的话)。
3.2 调用BeanNameAware
接口的方法
如果Bean实现了BeanNameAware
接口,Spring会调用它的setBeanName()
方法,传递Bean的名称。
3.3 调用BeanClassLoaderAware
接口的方法
如果Bean实现了BeanClassLoaderAware
接口,Spring会调用它的setBeanClassLoader()
方法,传递类加载器的引用。
3.4 调用BeanFactoryAware
接口的方法
如果Bean实现了BeanFactoryAware
接口,Spring会调用它的setBeanFactory()
方法,传递BeanFactory的引用。
3.5 调用EnvironmentAware
接口的方法
如果Bean实现了EnvironmentAware
接口,Spring会调用它的setEnvironment()
方法,传递Environment对象的引用。
3.6 调用ApplicationContextAware
接口的方法
如果Bean实现了ApplicationContextAware
接口,Spring会调用它的setApplicationContext()
方法,传递ApplicationContext对象的引用。
3.7 调用MessageSourceAware
接口的方法
如果Bean实现了MessageSourceAware
接口,Spring会调用它的setMessageSource()
方法,传递MessageSource对象的引用。
3.8 调用ApplicationEventPublisherAware
接口的方法
如果Bean实现了ApplicationEventPublisherAware
接口,Spring会调用它的setApplicationEventPublisher()
方法,传递ApplicationEventPublisher对象的引用。
四. 调用自定义的初始化方法
4.1 调用InitializingBean
接口的afterPropertiesSet()
方法
如果Bean实现了InitializingBean
接口,Spring会调用它的afterPropertiesSet()
方法。此外,还可以通过@PostConstruct注解标注一个无参数的方法,该方法将在依赖注入完成后被自动调用。
4.2. 调用自定义的初始化方法(XML配置或注解)
通过在XML配置文件中使用<bean>
标签的init-method
属性,或者使用@Bean注解的initMethod
属性,可以指定一个初始化方法。
五. 使用阶段(Ready to Use)
此时,Bean已经完全初始化并可以使用了。
六. 销毁(Destruction)
6.1 Bean实现了DisposableBean
接口,Spring会调用它的destroy()
方法
当容器关闭时,会触发Bean的销毁过程。如果Bean实现了DisposableBean
接口,Spring会调用它的destroy()
方法。此外,还可以通过@PreDestroy注解标注一个无参数的方法,该方法将在容器销毁Bean之前被自动调用。
6.2 自定义销毁方法(XML配置或注解)
通过在XML配置文件中使用<bean>
标签的destroy-method
属性,或者使用@Bean注解的destroyMethod
属性,可以指定一个销毁方法。
这个过程确保了Spring管理的Bean在生命周期中的每个阶段都能得到正确的处理和配置。理解这些步骤对于正确管理和使用Spring Bean至关重要。