💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。 <br/> 对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。 <br/> **1. bean的生命周期有7步** (1)通过无参构造器创建 bean 实例。 (2)调用 Setter 方法为 bean 的属性赋值。 (3)调用 bean 的初始化方法之前。 (4)调用 bean 的初始化方法。 (5)调用 bean 的初始化方法之后。 (6)可以获取 bean 了。 (7)当容器关闭时候,调用 bean 的销毁的方法。 <br/> **2. 演示bean生命周期** 【1】maven坐标。 ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency> ``` 【2】待注入到 IoC 容器的类。 ```java public class Account { private String username; public Account() { System.out.println("1:调用无参构造器创建Bean"); } public void setUsername(String username) { this.username = username; System.out.println("2:调用set方法对属性赋值"); } public void initMethod() { System.out.println("4:调用初始化方法初始化Bean"); } public void destroyMethod() { System.out.println("7:调用销毁方法销毁Bean"); } public String getUsername() { return username; } } ``` 【3】实现 Bean 的后置处理器。 ```java public class CustomBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("3:在初始化之前执行的方法"); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("5:在初始化之后执行的方法"); return bean; } } ``` 【4】注入 IoC 容器中`ApplicationContext.xml`。 ```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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="customBeanPostProcessor" class="learn.springbeanlife.handler.CustomBeanPostProcessor"/> <bean id="account" class="learn.springbeanlife.entity.Account" init-method="initMethod" destroy-method="destroyMethod"> <property name="username" value="zhangsan"/> </bean> </beans> ``` 【5】测试。 ```java public class AccountTest { private final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); @Test public void getAccount() { Account account = context.getBean(Account.class); System.out.println("6:获取已经创建的Bean"); //手动销毁IoC容器 context.close(); } } ``` ``` /********** 程序执行步骤 ************************/ 1:调用无参构造器创建Bean 2:调用set方法对属性赋值 3:在初始化之前执行的方法 4:调用初始化方法初始化Bean 5:在初始化之后执行的方法 6:获取已经创建的Bean 7:调用销毁方法销毁Bean ``` **** 案例源码:https://gitee.com/flymini/codes03/tree/master/learn-springbeanlife