介紹下Java Spring的核心接口,容器中Bean的實(shí)例化
Spring的核心接口
ApplicationContext接口
繼承了BeanFactory并且提供了加載資源文件的方法
ApplicationContext其實(shí)就是一個容器,ApplicationContext的實(shí)例其實(shí)就是容器對象,這個容器對象在實(shí)例化過程中其實(shí)就是容器初始化的過程
下面這幾個都是ApplicationContext接口的實(shí)現(xiàn)類
ClasspathXmlApplicationContext
加載Classpath下的xml格式的配置文件,初始化這樣的實(shí)例
FileSystemXmlApplicationContext
加載文件路徑下的xml文件
AnnotationConfigApplicationContext
注解配置
SpringMVC: WebApplicationContext
這個還沒有引入對應(yīng)的依賴所以暫時看不到
BeanFactory接口
生產(chǎn)bean,生產(chǎn)全部bean,容器。ApplicationContext接口繼承了BeanFactory接口
也就是說BeanFactory接口實(shí)際上提供了Bean獲得組件 管理組件方法
Spring容器中Bean的實(shí)例化
Spring的核心就是控制反轉(zhuǎn),它要控制實(shí)例的生成(實(shí)例化)
實(shí)例化主要有以下幾種方式
構(gòu)造方法
無參構(gòu)造方法
默認(rèn)使用的就是無參構(gòu)造方法,最常用的
先貼出來xml文件,其中如果有參構(gòu)造方法把無參構(gòu)造方法覆蓋掉的話,就需要constructor-arg標(biāo)簽來告知,其中的name標(biāo)簽就是對應(yīng)的有參構(gòu)造方法的參數(shù)名,而無參構(gòu)造方法想要給屬性做賦值就只需要property子標(biāo)簽即可
有參構(gòu)造方法
測試后我們發(fā)現(xiàn)
工廠
靜態(tài)工廠
工廠里的生產(chǎn)方法是靜態(tài)方法
注冊組件
實(shí)例工廠
工廠里的生產(chǎn)方法不是靜態(tài)方法
組件注冊
我們需要額外注冊組件,并且要告訴其工廠是誰 工廠要使用的方法是什么
測試類
這里我們發(fā)現(xiàn)雖然都是User 但他們不是同一個組件
注意:如果直接去取的話或發(fā)生異常
此時加個id再去取出就可以了,
方法二:可以使用Map方式,按照類型去取出User組件
靜態(tài)工廠和實(shí)例工廠在整合一些已有的工具類的時候,工具類有一些靜態(tài)方法返回某一些實(shí)例而后面要去使用這些實(shí)例,就需要使用靜態(tài)工廠方法注冊組件
FactoryBean→使用工廠方法
FactoryBean實(shí)際上是個接口,我們看下它的代碼
getObject()就是生產(chǎn)方法,其實(shí)就是返回一個實(shí)例
使用UserFactoryBean的set方法去給User做一個賦值
注冊組件
我們的目的是想要通過FactoryBean獲取到一個User類型的組件
通過FactoryBean注冊的組件類型:和getObject方法的返回值是相關(guān)的,簡單來講就是Spring再檢查注冊組件的時候會檢查組件有沒有實(shí)現(xiàn)FactoryBean接口如果有實(shí)現(xiàn)就會去找到里面的getObject方法,把getObject返回的實(shí)例注冊為容器中的組件
面試題:
BeanFactory和FactoryBean區(qū)別
都可以注冊組件
BeanFactory:生產(chǎn)的是全部組件
FactoryBean:注冊的特定類型的組件
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章

Springboot指定掃描路徑的實(shí)現(xiàn)示例

java正則表達(dá)式判斷強(qiáng)密碼和隨機(jī)生成強(qiáng)密碼代碼示例

SpringBoot?Redis清除所有的key的實(shí)現(xiàn)方法

Java實(shí)現(xiàn)數(shù)據(jù)更新和事件通知的觀察者模式

java面試常見問題---ConcurrentHashMap

IntelliJ IDEA之高效代碼插件RainBow Brackets詳解

Java將Word文檔轉(zhuǎn)換為PDF文件的幾種常用方法總結(jié)