Bean的自动装配和生命周期

34 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天

自动装配

Spring的元素中包含一个autowire属性,可以通过设置autowire属性的值实现Bean的自动装配

默认值描述
default(默认值)由的上级元素的default-autowire属性确定
byName根据元素id属性的值自动装配
byType根据元素的数据类型(Ttpe)自动装配,如果一个Bean的数据类型,兼容另一个Bean中的数据类型,则自动适配
constructor根据构造函数参数的数据类型进行byType模式的自动匹配
no默认值,不适用自动装配,Bean依赖必须通过元素或ref属性定义

举例:

<bean id="userDao" class="com.hexiaoxing.dao.impl.StudentDaoImpl"></bean>
​
<bean id="studentService" class="com.hexiaoxing.service.impl.StudentServiceImpl" autowire="byName"></bean>

在StudenServiceImpl中定义了studentDao属性,这与配置文件中id为userDao的Bean相匹配,所以自动将id为studentDao的Bean装配到id为studentService的Bean中。我们就不用再使用property或注解进行装配了。

Bean的生命周期

Bean的生命周期是指Bean实例被创建、初始化和销毁的过程。在Bean的两种作用域singleton和prototype中,Spring容器对Bean的生命周期的管理是不同的。

在singleton的作用域中,Spring容器可以管理Bean的生命周期,控制着Bean的创建、初始化和销毁。 在prototype的作用域中,Spring容器只负责创建Bean实例,不会管理其生命周期

监控周期节点

在Bean的生命周期中,有两个时间点尤为重要,这两个时间点分别是Bean实例初始化后Bean实例销毁前,在这两个时间节点通常需要完成一些指定操作,因此常常需要对这两个节点进行监控。

监控这两个节点有两种方式,一种是XML配置文件,一种是使用注解

注解的方式:

Spring容器提供了@PostConstruct用于监控Bean对象初始化节点,提供了@PreDestroy用于监控Bean对象销毁节点:

@PostConstruct
public void init(){
    System.out.println("Bean的初始化完成,调用init()方法");
}
@PreDestroy
public void destroy(){
    System.out.println("Bean销毁前调用destroy()方法");
}