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();}
}