> 文章列表 > Bean 的生命周期(从诞生到销毁)

Bean 的生命周期(从诞生到销毁)

Bean 的生命周期(从诞生到销毁)

❣️关注专栏:JavaEE

生命周期指的是⼀个对象从诞⽣到销毁的整个⽣命过程。
Bean 的⽣命周期分为以下 5 ⼤部分:

1、实例化 Bean(为 Bean 分配内存空间)

实例化 Bean 就是给 Bean 对象分配内存空间,是 Java 级别的系统“事件”,其操作过程不可⼈⼯⼲预和修改,是系统自动给 Bean 分配内存空间。实例化不等于初始化

2、设置属性(Bean 注⼊和装配)

在 spring-config.xml 文件中进行 Bean 的注入和装配

3、Bean 初始化。

初始化是给开发者提供的,可以在实例化之后,类加载完成之前进⾏⾃定义“事件”处理。

(1)实现各种 Aware 通知,如 BeanNameAware、BeanFactoryAware、ApplicationContextAware 的接⼝⽅法。

(2)初始化前置方法

(3)执行初始化方法【xml 方式 和 注解方式】(设置了就会执行,不设置就不会执行)

  • 注解方式: @PostConstruct,依赖注⼊操作之后被执⾏;
  • xml方式:执⾏⾃⼰指定的 init-method ⽅法(如果有指定的话)

(4)初始化后置方法

4、使⽤ Bean

5、销毁 Bean

销毁容器的各种⽅法,如 @PreDestroy、DisposableBean 接⼝⽅法、destroy-method。

Bean 生命周期代码演示

 Bean 生命周期的初始化

package com.java.demo.component;
import org.springframework.beans.factory.BeanNameAware;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;/*** Bean 生命周期的 初始化*/public class BeanCompont implements BeanNameAware {@Overridepublic void setBeanName(String s) {System.out.println("执行了通知 BeanName -> " + s);}/*** xml 方式的初始化*/public void myInit() {System.out.println("xml 方式的初始化");}@PostConstructpublic void doPostConstruct() {System.out.println("注解方式的初始化");}public void sayHi() {System.out.println("执行 sayHi()");}@PreDestroypublic void doPreDestroy() {System.out.println("执行了 doPreDestroy(销毁)");}
}

注入属性,设置 xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:content="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><bean id="beanCompont" class="com.java.demo.component.BeanCompont"init-method="myInit"></bean>
</beans>

调用类

package com.java.demo;import com.java.demo.component.BeanCompont;
import com.java.demo.controller.UserController;
import com.java.demo.controller.UserController2;
import com.java.demo.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {// 获取 Spring 上下文ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");// 获取 Bean 对象BeanCompont compont = context.getBean("beanCompont", BeanCompont.class);// 使用 Beancompont.sayHi();// 销毁 Beancontext.destroy();}
}