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至关重要。

