文章目录
Spring Bean的生命周期
1. 实例化
在Spring容器中,当我们定义一个Bean时,Spring会根据配置信息实例化一个Bean对象。实例化过程是通过调用Bean的构造函数完成的。
1.1 示例代码
public class MyBean {
public MyBean() {
System.out.println("Bean实例化");
}
}
在上述示例代码中,我们定义了一个名为MyBean
的Bean,并在构造函数中输出了一条实例化的日志。
2. 属性赋值
在实例化完成后,Spring会根据配置信息将属性值注入到Bean中。属性赋值可以通过构造函数、Setter方法或直接赋值方式完成。
2.1 示例代码
public class MyBean {
private String message;
public MyBean() {
System.out.println("Bean实例化");
}
public void setMessage(String message) {
this.message = message;
}
}
在上述示例代码中,我们在MyBean
中定义了一个message
属性,并提供了一个Setter方法用于属性赋值。
2.2 属性赋值的配置
<bean id="myBean" class="com.example.MyBean">
<property name="message" value="Hello Spring" />
</bean>
在上述配置中,我们使用<bean>
元素定义了一个名为myBean
的Bean,并通过<property>
元素将message
属性的值设置为Hello Spring
。
3. 初始化
在属性赋值完成后,Spring会调用Bean的初始化方法对Bean进行一些额外的初始化操作。初始化方法可以通过实现InitializingBean
接口的afterPropertiesSet
方法、使用@PostConstruct
注解或在配置文件中指定。
3.1 示例代码
public class MyBean implements InitializingBean {
private String message;
public MyBean() {
System.out.println("Bean实例化");
}
public void setMessage(String message) {
this.message = message;
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Bean初始化");
}
}
在上述示例代码中,我们在MyBean
中实现了InitializingBean
接口,并在afterPropertiesSet
方法中输出了一条初始化的日志。
3.2 初始化方法的配置
<bean id="myBean" class="com.example.MyBean" init-method="init">
<property name="message" value="Hello Spring" />
</bean>
在上述配置中,我们使用<bean>
元素定义了一个名为myBean
的Bean,并通过init-method
属性指定了初始化方法为init
。
4. 销毁
在Spring容器关闭时,会调用Bean的销毁方法对Bean进行一些清理操作。销毁方法可以通过实现DisposableBean
接口的destroy
方法、使用@PreDestroy
注解或在配置文件中指定。
4.1 示例代码
public class MyBean implements InitializingBean, DisposableBean {
private String message;
public MyBean() {
System.out.println("Bean实例化");
}
public void setMessage(String message) {
this.message = message;
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Bean初始化");
}
@Override
public void destroy() throws Exception {
System.out.println("Bean销毁");
}
}
在上述示例代码中,我们在MyBean
中实现了DisposableBean
接口,并在destroy
方法中输出了一条销毁的日志。
4.2 销毁方法的配置
<bean id="myBean" class="com.example.MyBean" init-method="init" destroy-method="destroy">
<property name="message" value="Hello Spring" />
</bean>
在上述配置中,我们使用<bean>
元素定义了一个名为myBean
的Bean,并通过destroy-method
属性指定了销毁方法为destroy
。
5. 总结
Spring Bean的生命周期包括实例化、属性赋值、初始化和销毁四个阶段。在实例化阶段,Spring会根据配置信息实例化一个Bean对象;在属性赋值阶段,Spring会将属性值注入到Bean中;在初始化阶段,Spring会调用Bean的初始化方法对Bean进行一些额外的初始化操作;在销毁阶段,Spring会调用Bean的销毁方法对Bean进行一些清理操作。
以上是关于Spring Bean的生命周期的介绍,希望对你有所帮助!
普通Java对象生命周期与Bean对象的生命周期的区别
1. 普通Java对象的生命周期
在Java中,普通Java对象的生命周期由Java虚拟机(JVM)管理。当一个Java对象被创建时,它会一直存在于内存中,直到它不再被引用或者程序结束。当一个Java对象不再被引用时,JVM会自动将其标记为垃圾对象,并在适当的时间进行垃圾回收。
2. Bean对象的生命周期
与普通Java对象不同,Spring的Bean对象的生命周期由Spring容器管理。Spring容器在启动时会根据配置信息实例化Bean对象,并在适当的时间对其进行属性赋值、初始化和销毁操作。下面我们将分别介绍Bean对象生命周期的四个阶段。
2.1 实例化阶段
在实例化阶段,Spring会根据配置信息实例化一个Bean对象。实例化可以通过构造函数、工厂方法或者工厂Bean完成。
示例代码
public class MyBean {
public MyBean() {
System.out.println("Bean实例化");
}
}
在上述示例代码中,我们定义了一个名为MyBean
的Bean,并在构造函数中输出了一条实例化的日志。
2.2 属性赋值阶段
在属性赋值阶段,Spring会根据配置信息将属性值注入到Bean中。属性赋值可以通过构造函数、Setter方法或直接赋值方式完成。
示例代码
public class MyBean {
private String message;
public MyBean() {
System.out.println("Bean实例化");
}
public void setMessage(String message) {
this.message = message;
}
}
在上述示例代码中,我们在MyBean
中定义了一个message
属性,并提供了一个Setter方法用于属性赋值。
2.3 初始化阶段
在属性赋值完成后,Spring会调用Bean的初始化方法对Bean进行一些额外的初始化操作。初始化方法可以通过实现InitializingBean
接口的afterPropertiesSet
方法、使用@PostConstruct
注解或在配置文件中指定。
示例代码
public class MyBean implements InitializingBean {
private String message;
public MyBean() {
System.out.println("Bean实例化");
}
public void setMessage(String message) {
this.message = message;
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Bean初始化");
}
}
在上述示例代码中,我们在MyBean
中实现了InitializingBean
接口,并在afterPropertiesSet
方法中输出了一条初始化的日志。
2.4 销毁阶段
在Spring容器关闭时,会调用Bean的销毁方法对Bean进行一些清理操作。销毁方法可以通过实现DisposableBean
接口的destroy
方法、使用@PreDestroy
注解或在配置文件中指定。
示例代码
public class MyBean implements InitializingBean, DisposableBean {
private String message;
public MyBean() {
System.out.println("Bean实例化");
}
public void setMessage(String message) {
this.message = message;
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Bean初始化");
}
@Override
public void destroy() throws Exception {
System.out.println("Bean销毁");
}
}
在上述示例代码中,我们在MyBean
中实现了DisposableBean
接口,并在destroy
方法中输出了一条销毁的日志。
3. 区别
普通Java对象的生命周期由JVM管理,而Bean对象的生命周期由Spring容器管理。在实例化阶段,普通Java对象和Bean对象没有区别;在属性赋值阶段,普通Java对象需要手动进行属性赋值,而Bean对象可以通过配置信息自动完成属性赋值;在初始化阶段,普通Java对象没有初始化方法,而Bean对象可以通过实现InitializingBean
接口、使用@PostConstruct
注解或在配置文件中指定初始化方法;在销毁阶段,普通Java对象没有销毁方法,而Bean对象可以通过实现DisposableBean
接口、使用@PreDestroy
注解或在配置文件中指定销毁方法。
以上是普通Java对象生命周期与Bean对象生命周期的区别,希望对你有所帮助!