您现在的位置是:首页 >技术交流 >Bean 的生命周期(从诞生到销毁)网站首页技术交流

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

RRrrric. 2023-06-03 16:00:03
简介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();
    }
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。