您现在的位置是:首页 >技术交流 >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 {
@Override
public void setBeanName(String s) {
System.out.println("执行了通知 BeanName -> " + s);
}
/**
* xml 方式的初始化
*/
public void myInit() {
System.out.println("xml 方式的初始化");
}
@PostConstruct
public void doPostConstruct() {
System.out.println("注解方式的初始化");
}
public void sayHi() {
System.out.println("执行 sayHi()");
}
@PreDestroy
public 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);
// 使用 Bean
compont.sayHi();
// 销毁 Bean
context.destroy();
}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。