spring生命周期
1、spring生命周期
Spring框架中的bean生命周期指的是从创建到销毁的整个过程。以下是Spring Bean生命周期的主要阶段:
-
实例化Bean:
- 在Spring Boot中,Bean通常是通过注解
@Component
、@Service
、@Repository
或@Controller
来声明的。
- 在Spring Boot中,Bean通常是通过注解
-
属性赋值(依赖注入):
- 通过注解
@Autowired
、@Inject
或@Resource
来实现自动装配。
- 通过注解
-
BeanNameAware接口:
- 如果需要,可以通过实现
BeanNameAware
接口并使用@PostConstruct
注解来获取Bean名称。
- 如果需要,可以通过实现
-
BeanFactoryPostProcessor和BeanPostProcessor接口:
- 可以通过实现这些接口并使用
@Configuration
注解来创建配置类,然后在其中定义相应的postProcessor
Bean。
- 可以通过实现这些接口并使用
-
InitializingBean接口和init-method:
- 实现
InitializingBean
接口,并重写afterPropertiesSet
方法。 - 或者使用
@PostConstruct
注解在Bean的字段或方法上来指定初始化逻辑。
- 实现
-
使用Bean:
- Bean初始化完成后,就可以在应用程序中使用了。
-
DisposableBean接口和destroy-method:
- 实现
DisposableBean
接口,并重写destroy
方法。 - 或者使用
@PreDestroy
注解在Bean的字段或方法上来指定销毁逻辑。
- 实现
2、spring boot代码实现
package com.ybw.service;import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;/*** 生命周期测试** @author ybw* @version V1.0* @className LifeCycle* @date 2024/11/4**/
@Component
@Slf4j
public class LifeCycleService {/*** Bean初始化后执行的方法*/@PostConstructpublic void init() {log.info("Bean初始化后执行的方法");}/*** 测试方法** @methodName: sayHello* @return: void* @author: ybw* @date: 2024/11/4**/public void sayHello() {log.info("Hello World");}/*** Bean销毁前执行的方法*/@PreDestroypublic void destroy() {log.info("Bean销毁前执行的方法");}
}
在Spring Boot中,通常不需要显式定义init-method
和destroy-method
,因为@PostConstruct
和@PreDestroy
注解已经提供了相同的功能。此外,Spring Boot通过自动配置和组件扫描简化了许多配置,使得开发者可以更专注于业务逻辑的实现。
日志如下:
[INFO ] 2024-11-04 14:10:19.703 [main] com.ybw.service.LifeCycleService - Bean初始化后执行的方法
[INFO ] 2024-11-04 14:10:20.584 [main] c.ybw.service.LifeCycleServiceTest - Started LifeCycleServiceTest in 2.239 seconds (process running for 4.553)
[INFO ] 2024-11-04 14:10:21.691 [main] com.ybw.service.LifeCycleService - Hello World
[INFO ] 2024-11-04 14:10:21.717 [SpringApplicationShutdownHook] com.ybw.service.LifeCycleService - Bean销毁前执行的方法