文章目录
- bean的生命周期
- 1. Bean定义阶段
- 2. Bean实例化阶段
- 3. 属性赋值阶段
- 4. 初始化阶段
- 5. 使用阶段
- 6. 销毁阶段
bean的生命周期
在Spring Boot中,Bean的生命周期包括定义、实例化、属性赋值、初始化、使用和销毁等阶段。下面我将详细解释这些阶段,并提供相应的代码示例。
1. Bean定义阶段
Bean的定义通常通过注解(如@Component
、@Service
、@Repository
、@Controller
等)、XML配置或Java配置类(@Configuration
)来实现。
代码示例(使用注解定义Bean):
@Service
public class MyService {// ...
}
2. Bean实例化阶段
在这一阶段,Spring容器会根据Bean的定义创建Bean的实例。实例化方式包括构造器实例化、静态工厂方法实例化和实例工厂方法实例化。
代码示例(构造器实例化):
// Spring容器会通过无参构造器创建MyService的实例
@Service
public class MyService {public MyService() {// 构造器逻辑}// ...
}
3. 属性赋值阶段
在Bean实例化之后,Spring容器会将Bean定义中声明的依赖注入到Bean实例的属性中。
代码示例(使用@Autowired
注入依赖):
@Service
public class MyService {private final MyRepository myRepository;@Autowiredpublic MyService(MyRepository myRepository) {this.myRepository = myRepository;}// ...
}
4. 初始化阶段
在Bean准备好被使用之前,Spring容器会执行一系列的初始化逻辑。这包括Aware接口回调、BeanPostProcessor前置处理、初始化方法和BeanPostProcessor后置处理。
代码示例(实现InitializingBean
接口):
import org.springframework.beans.factory.InitializingBean;@Service
public class MyService implements InitializingBean {@Overridepublic void afterPropertiesSet() throws Exception {// 初始化逻辑}// ...
}
或者使用@PostConstruct
注解:
import javax.annotation.PostConstruct;@Service
public class MyService {@PostConstructpublic void init() {// 初始化逻辑}// ...
}
5. 使用阶段
在Bean完全初始化后,它就可以被应用程序使用了。开发者可以通过依赖注入或ApplicationContext
来获取Bean的实例。
代码示例(使用ApplicationContext
获取Bean):
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);MyService myService = context.getBean(MyService.class);// 使用myService}
}
6. 销毁阶段
当Bean不再需要时,Spring容器会负责销毁它。销毁过程包括执行销毁回调接口或销毁方法。
代码示例(实现DisposableBean
接口):
import org.springframework.beans.factory.DisposableBean;@Service
public class MyService implements DisposableBean {@Overridepublic void destroy() throws Exception {// 销毁逻辑}// ...
}
或者在配置文件中指定destroy-method
:
<bean id="myService" class="com.example.MyService" destroy-method="cleanup"/>
请注意,对于Web应用程序,Spring容器通常会在Web服务器关闭时自动销毁所有的Bean。而对于非Web应用程序,你可能需要手动关闭ApplicationContext
来触发Bean的销毁过程。
希望这些代码示例能帮助你更好地理解Spring Boot中Bean的生命周期。