觀前提示:本篇博客演示使用的 IDEA 版本為2021.3.3版本,使用的是Java8(又名jdk1.8)
電腦使用的操作系統(tǒng)版本為 Windows 10
目錄
Spring 的執(zhí)行流程
1. 啟動容器
2. 根據(jù)配置完成 Bean 的初始化
3. 注冊 Bean 對象到容器中
4. 裝配 Bean 的屬性
Bean 的生命周期
Bean 的生命周期代碼演示
Spring 的執(zhí)行流程
在看 Bean 的生命周期之前需要先簡單了解一下 Spring 的執(zhí)行流程
1. 啟動容器
ApplicationContext 啟動容器
2. 根據(jù)配置完成 Bean 的初始化
?文章來源地址http://www.zghlxwxcb.cn/news/detail-490377.html
加載配置文件:類加載路徑下的 Beans.xml?
3. 注冊 Bean 對象到容器中
?
掃描 org.example 包. 掃描有沒有五大類注解, 只有在包掃描的路徑上的類, 且使用 Spring 的注解才可以被注冊到容器中.?
4. 裝配 Bean 的屬性
?
如果 Bean 對象需要使用其他 Bean 對象作為屬性, 可以使用注解 @Autowired 和 @Resource
Bean 的生命周期
?命周期指的是?個對象從誕?到銷毀的整個?命過程,我們把這個過程就叫做?個對象的?命周期。
Bean 的?命周期分為以下 5 ?部分:
1. 開辟內(nèi)存空間: 實例化 ≠ 初始化
2. 設(shè)置屬性 (注入屬性)
3. 初始化
? ? 3.1 各種通知
? ? 3.2 初始化前置方法
? ? 3.3 初始化方法(兩種實現(xiàn)方式: xml 方式, 注解方式)
? ? 3.4 初始化后置方法
4. 使用 Bean
5. 銷毀對象
?
Bean 的生命周期代碼演示
初始化方法演示
先在?com.java.demo.component 創(chuàng)建一個類, 叫做 BeanComponent, 然后再?spring-config.xml 里面設(shè)置 Bean
<bean id="beanComponent" class="com.java.demo.component.BeanComponent" ></bean>
這步是初始化的通知
BeanComponent 實現(xiàn)接口?BeanNameAware ,就可以操作下面的 @Override 里面的內(nèi)容, 比如打印 Bean的名字
package com.java.demo.component;
import org.springframework.beans.factory.BeanNameAware;
public class BeanComponent implements BeanNameAware {
@Override
public void setBeanName(String s) {
System.out.println("執(zhí)行了通知 BeanName -> " + s);
}
}
因為初始化方法用得少.所以這步演示前置初始化方法的 xml 方式
在?spring-config.xml 里面寫 init-method
可以看到他有很多方法
?
?
這里只需要?init-method?
<bean id="beanComponent" class="com.java.demo.component.BeanComponent" init-method="myInit"></bean>
再回到?BeanComponent 寫?myInit 方法, 注意名字保持一致
package com.java.demo.component;
import org.springframework.beans.factory.BeanNameAware;
import javax.annotation.PostConstruct;
public class BeanComponent implements BeanNameAware {
@Override
public void setBeanName(String s) {
System.out.println("執(zhí)行了通知 BeanName -> " + s);
}
// xml 方式的初始化方法
public void myInit(){
System.out.println("xml 方式的初始化方法");
}
// 注解方式的初始化方法
@PostConstruct
public void doPostConstruct(){
System.out.println("注解方式的初始化方法");
}
//使用 Bean
public void sayHi(){
System.out.println("執(zhí)行 sayHi()");
}
}
到此初始化方法全部執(zhí)行完,也可以加上銷毀
注解的方式執(zhí)行銷毀
@PreDestroy
public void doPreDestroy(){
System.out.println("doPreDestroy");
}
回到 APP 里面執(zhí)行
import com.java.demo.component.BeanComponent;
import com.java.demo.controller.UserController;
import com.java.demo.controller.UserController2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
//不使用 ApplicationContext 而使用 ClassPathXmlApplicationContext
//因為 ApplicationContext 沒有銷毀方法, 而 ClassPathXmlApplicationContext 有銷毀方法
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
BeanComponent component = context.getBean("beanComponent", BeanComponent.class);
//使用 Bean
component.sayHi();
//銷毀 Bean
context.destroy();
}
}
符合預(yù)期
注意: 注解方式的初始化方法優(yōu)先級比 xml 的初始化方法優(yōu)先級高,因為主流是 注解
如果,注釋掉?
context.destroy();
最后的? doPreDestroy, 就不會執(zhí)行
本文完,感謝觀看,不足之處請在評論區(qū)指出 !
文章來源:http://www.zghlxwxcb.cn/news/detail-490377.html
?
到了這里,關(guān)于Bean 的生命周期的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!