spring bean創建總覽 1

1 開始

?

這是一個總圖

下邊慢慢看

?我們最基礎的寫的方式就是xml的方式去寫

?像這樣,

而我們會通過applicationContext的方式去獲得我們的bean ,我其中一篇博客就寫到了applicationContext他的父類就是beanFactory

?但是中間的是怎么樣處理的呢?

?因為你獲取getbean 的時候要么是bean.class 要么就是這個? bean的名字。所以思考應該是在容器中用map去存放的這個bean。和我們創建bean的一些東西,等等

?

我們可以知道,我們可以通過xml和properties 還有yaml定義一些bean定義信息(雖然我們很少將bean的定義信息寫成properties和還有yaml文件)但是 其實這些文件解析成bean的時候會解析成統一的beanDefinition。這時候會有一個解析處理環節。 而這個解析環節有一個解析處理環節就是beanDefinitionReader。然后beanDefiniton會通過反射去實例化。

bean工廠是一個容器的跟接口和入口 ,反射的代碼也是在bean工廠搞的

bean工廠就是一個核心容器

?我么需要postProcessor? 后置處理器。

?

?我們拿到beanfactory之后進型增強,你的那個 ,還有上邊的那個動態修改屬性值的問題。

我們就有一個placeholder(占位符)處理的接口。

?

?在源碼中經常會遇到一個populate的方法,這個方式其實就是填充屬性的

Aware 接口講解一下:

我想讓a對象有一個獲得當前容器的這樣一個功能沒那莫我就讓他a這個類趨勢實現applicationcontextaware接口,并實習其中的方法就行如

? 然后在提供一個get方法就ok了。

比如說我需要知道我的beanname這時候我就可以繼承beannameaware

需要框架啥組件就實現對應得aware接口就行。

你做二次開發得時候這時候就需要了

在這個方法里邊就會有一個方法

?

AbstractApplicationContext 有這么一個抽象類,其中有一個方法叫reflash。

里邊有

?各種忽略,那么這一塊呢還能不僅能忽略接口還能忽略類型。這里有了解即可以后在說。

beanpostpocesser 這里有個前之有個后置,兩個方法,他有一個實現類,????

走到最后,你會看到

所以這一塊就是aop 。

?這個圖就是說明了最簡單的bean創建,僅僅是bean創建時是怎么可以擴展的那一部分。不完整

?

1結束

?2開始

?

?這個順序為啥是這樣得????????

?人家就是這莫遵循得,所以在學tomcat源碼得時候好像也是這樣,一層一層得都去遵循了自己得這個生命周期。

那么在bean初始化時候如上上圖,我們不是知道他分為幾個階段嗎?在每個階段完成之后我們就讓他輸出他已經完成了。那么這個工作怎么做,這就需要 觀察者模式了

?一些重點得接口

還有一個beanDefinitionRegister 這個主要是對beandefinition增刪改查得 。

一個小小得面試題

首先,Spring 里面的核心功能是 IOC 容器,所謂 IOC 容器呢,本質上就是一個 Bean
的容器或者是一個 Bean 的工廠。
它能夠根據 xml 里面聲明的 Bean 配置進行 bean 的加載和初始化,然后 BeanFactory
來生產我們需要的各種各樣的 Bean。

BeanFactory 是所有 Spring Bean 容器的頂級接口,它為 Spring 的容器定義了一
套規范,并提供像 getBean 這樣的方法從容器中獲取指定的 Bean 實例。
BeanFactory 在產生 Bean 的同時,還提供了解決 Bean 之間的依賴注入的能力,
也就是所謂的 DI。
FactoryBean 是一個工廠 Bean,它是一個接口,主要的功能是動態生成某一個類型的
Bean 的實例,也就是說,我們可以自定義一個 Bean 并且加載到 IOC 容器里面。
它里面有一個重要的方法叫 getObject(),這個方法里面就是用來實現動態構建 Bean
的過程。
Spring Cloud 里面的 OpenFeign 組件,客戶端的代理類,就是使用了 FactoryBean
來實現的。

a是由afactiorybean調用getobject生成得

容器創建得時候不會有a ,他不會遵循bean得生命周期。

?

?感悟

學習接口得作用,以及他設計得思想。

2結束

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VET:基因變異VCF數據集便捷提取工具

VET:Vcf Export Tools 工具簡介 VET是一個基于R語言開發的變異位點信息批量提取工具,主要功能是根據VCF數據集,按照基因ID、樣品ID、變異位點ID等參數,實現批量提取,同時支持變異位點結構注釋,一步搞定變異…

android 的Thread類

Thread類 位于java.lang包下的Thread類是非常重要的線程類,它實現了Runnable接口,學習Thread類包括這些相關知識:線程的幾種狀態、上下文切換,Thread類中的方法的具體使用。 線程:比進程更小的執行單元,每…

Php“牽手”京東商品詳情頁數據采集方法,京東API接口申請指南

京東詳情接口 API 是開放平臺提供的一種 API 接口,它可以幫助開發者獲取商品的詳細信息,包括商品的標題、描述、圖片等信息。在電商平臺的開發中,詳情接口API是非常常用的 API,因此本文將詳細介紹詳情接口 API 的使用。 一、京東…

uniapp編寫微信小程序遇到的坑總結

1、阻止事件冒泡 使用uniapp開發微信小程序的時候,發現使用click.stop來阻止事件冒泡沒有作用,點擊了之后發現仍然會觸發父組件或者祖先組件的事件。 在網上查閱,發現使用tap.stop才能阻止事件冒泡。 2、二維碼生成 在網上找了很多&…

Linux 信號的基本概念

信號的基本概念 1. 信號的概念 信號是Linux系統響應某些條件產生的一些事件。接收到信號的進程會相應地采取一些行動。 2. 信號的生成 信號是由于某些錯誤條件而生成的,如內存段沖突、浮點處理器錯誤或非法指令等。信號的生成其實就是一種軟件層次的中斷&#x…

adb對安卓app進行抓包(ip連接設備)

adb對安卓app進行抓包(ip連接設備) 一,首先將安卓設備的開發者模式打開,提示允許adb調試 二,自己的筆記本要和安卓設備在同一個網段下(同連一個WiFi就可以了) 三,在筆記本上根據i…

JVM——類的生命周期

文章目錄 類加載過程加載驗證準備解析初始化 卸載 一個類的完整生命周期如下: 類加載過程 Class 文件需要加載到虛擬機中之后才能運行和使用,那么虛擬機是如何加載這些 Class 文件呢? 系統加載 Class 類型的文件主要三步:加載->連接->…

Redis-秒殺

唉 就記得當時搶冰墩墩的時候的秒殺了 我們要注意什么問題呢? 1.幾百萬人在這個瞬間搶冰墩墩 這個瞬間會有大量的請求 服務器要能抗的住 2.不能超賣,就那些冰墩墩 賣多了壓根沒有 好不容易搶到你說沒貨了怕不是要被沖爛 3.避免少賣 攏共就那些 你再少賣點 沒屁了 4.防黃牛…

CentOS系統環境搭建(十五)——CentOS安裝Kibana

centos系統環境搭建專欄🔗點擊跳轉 關于Elasticsearch的安裝請看CentOS系統環境搭建(十二)——CentOS7安裝Elasticsearch。 CentOS安裝Kibana 文章目錄 CentOS安裝Kibana1.下載2.上傳3.解壓4.修改kibana配置文件5.授予es用戶權限6.kibana 后臺…

uniapp的UI框架組件庫——uView

在寫uniapp項目時候,官方所推薦的樣式庫并不能滿足日常的需求,也不可能自己去寫相應的樣式,費時又費力,所以我們一般會去使用第三方的組件庫UI,就像vue里我們所熟悉的elementUI組件庫一樣的道理,在uniapp中…

? Spring Clould 配置中心 - Nacos

視頻地址:微服務(SpringCloudRabbitMQDockerRedis搜索分布式) Nacos配置管理-Nacos實現配置管理(P24、P25) Nacos除了可以做注冊中心,同樣可以做配置管理來使用。 當微服務部署的實例越來越多&#xff0c…

18萬字應急管理局智慧礦山煤礦數字化礦山技術解決方案WORD

導讀:原文《18萬字應急管理局智慧礦山煤礦數字化礦山技術解決方案WORD》(獲取來源見文尾),本文精選其中精華及架構部分,邏輯清晰、內容完整,為快速形成售前方案提供參考。 目 錄 第一章 項目概述 1.1項目…

《Go 語言第一課》課程學習筆記(七)

代碼塊與作用域:如何保證變量不會被遮蔽? 什么是變量遮蔽呢?package mainimport ("fmt""github.com/google/uuid""github.com/sirupsen/logrus" )func main() {fmt.Println("hello, world")logrus.…

私域新零售商業模式成功的八大要素

從事互聯網行業多年以來,遇到客戶問最多的一個問題,就是什么樣的模式火呀?在設計一個商業模式時,不單單只是考慮資金和人脈等等資源的,其實還是需要遵循這八大原則,它包括:客戶價值最大化原則、…

PyTorch學習筆記(十三)——現有網絡模型的使用及修改

以分類模型的VGG為例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) print(vgg16_true) vgg16_true.classifier.add_module("add_linear",nn.Linear(1000,10)) print(vgg16_true) vgg16_false.classifie…

C#學習,委托,事件,泛型,匿名方法

目錄 委托 聲明委托 實例化委托 委托的多播 委托的用途 事件 通過事件使用委托 聲明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 編寫匿名方法的語法 委托 類似于指針,委托是存有對某個方法的引用的一種引用類型變量,引用可以在運…

vue中使用faker庫生成指定類型的隨機數據

介紹 Faker.js 是十分流行的 Node.js 工具庫,2022年初,Faker.js的作者突然刪庫跑路,導致眾多應用程序崩潰,為了繼續使用Faker的功能,社區的幾位開發者組成團隊決定創建并維護新項目faker-js/faker,現其已成…

Docker+Selenium Grid搭建自動化測試平臺

安裝docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce -y Create a Docker Network docker network create grid 下載鏡像 hu…

laravel-admin之 解決上傳圖片不顯示 $form->image(‘image‘); 及 $grid->column(‘image‘);

參考 https://blog.csdn.net/u013164285/article/details/106017464 $grid->column(‘image’)->image(‘http://wuyan.cn’, 100, 100); // //設置服務器和寬高 圖片上傳的域名 上傳的圖片不顯示 在 這里設置了圖片的上傳路徑 在這里設置 域名 就可以回顯圖片

【計算機視覺|生成對抗】帶條件的對抗網絡進行圖像到圖像的轉換(pix2pix)

本系列博文為深度學習/計算機視覺論文筆記,轉載請注明出處 標題:Image-to-Image Translation with Conditional Adversarial Networks 鏈接:Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…