Spring框架中的Bean生命周期通常包含以下7个步骤:
1、实例化:当容器接收到Bean定义时,容器就会实例化Bean对象。这通常是通过Java反射机制完成的。
2、属性赋值:当Bean对象实例化后,容器就会将Bean的属性设置为配置文件或注解中提供的值,这通过依赖注入(Dependency Injection)完成。
3、BeanPostProcessor的前置处理(postProcessBeforeInitialization):在Bean进行属性赋值后,如果该Bean定义了BeanPostProcessor接口,那么容器会首先调用所有实现了BeanPostProcessor接口的类的postProcessBeforeInitialization()方法。这个方法调用是在Bean的初始化前执行的,可以在这个方法中对Bean进行处理和修改,比如实现AOP功能、BeanValidation校验等。
4、初始化:在属性赋值和BeanPostProcessor前置处理之后,容器会调用Bean的初始化方法,这个初始化方法可以是自定义的初始化方法(通过@Bean(init-method)或@PostConstruct注解声明)或者实现了InitializingBean接口的afterPropertiesSet()方法。
5、BeanPostProcessor的后置处理(postProcessAfterInitialization):在Bean的初始化后,如果该Bean定义了BeanPostProcessor接口,那么容器会调用所有实现了BeanPostProcessor接口的类的postProcessAfterInitialization()方法。这个方法调用是在Bean的初始化后执行的,可以在这个方法中进行一些Bean的后续处理和修改。
6、使用: 在初始化之后,我们可以使用该Bean了。这就是Bean的使用期。
7、销毁:当Bean不再需要的时候,容器会调用其销毁方法。这个销毁方法可以是自定义的销毁方法(通过@Bean(destroy-method)或@PreDestroy注解声明)或者实现了DisposableBean接口的destroy()方法。
总结:Spring的Bean生命周期可以简单地理解为实例化、属性赋值、初始化、使用和销毁这五个阶段,其中属性赋值和初始化包含了前置处理和后置处理的功能,对Bean进行了进一步的修改和处理,让我们可以通过简单的配置来实现复杂的功能。