在說具體內容之前,有必要先說明一下對于Spring(不是子集的SpringMVC)的組態檔依賴注入理解:
在組態檔里面相當于提前寫上某物件的所有實作類,就相當于是一個樹形圖這樣:

也就是說當我想要使用這些物件的時候需要先創建一個頂級物件(也就是IOC容器),也就是
ApplicationContext的實作類才能持有物件,當要使用這些物件的時候就需要通過IOC容器來取出來用。
然后看到SpringMVC并說創建一個容器來存放物件然后取出來用具體意思就是在一個類里,這里舉例子這是一個被注解為service的類吧,然后里面有個介面的參考(屬性或者欄位或者全域變數),這里并沒有初始化,也就是直接宣告了一個變數(參考)在這里,像是這樣:
Test test;
然后在組態檔依賴注入的方式寫上實作類的bean標簽,就直接就開始用了。
uj5u.com熱心網友回復:
具體想問什么?uj5u.com熱心網友回復:
bean 在容器里未必是樹形,他們就是一堆物件,可以有關系,也可以沒有關系。bean 也未必是容器初始化的時候就實體化,如果配置為懶加載,只有在用到這個 bean 的時候他才會實體化。
通常一個介面只有一個實作,這時候容器很容易推斷出來實體化哪一個實作。
有多個實作類的情況要么 xml 配置的時候指明實作類,要么 @Autowire 的時候指定Qualifier。
uj5u.com熱心網友回復:
一個Service層里的類,它有一個屬性,這個屬性只是宣告了但是未初始化。然后在程式呼叫的時候并沒有看到有初始化的動作,然而在直接就使用了(也就是說給了它個具體的物件),不知道為什么就給它了,大概就是這么個問題,這個物件怎么得到的?只看到書寫了組態檔里面有了物體物件,沒看到有創建一個容器的程序(這就是為什么開始先說Spring,因為Spring取出物件也看到new了一個容器),也就是從容器里面取出來給它。如果是對一個宣告上面書寫了注解AutoWire ,并且給實作類分配了Rep....倉庫注解,這種還能理解,因為這種直白點就是自動注入從標注為Rep倉庫注解的類里找到“同型別”的物件并創建給這個變數。而現在的情況主要問題是這些:
1.組態檔書寫了物件,相當于創建了這個物件,說明物體類的物件是存在了
2.沒看到創建容器取出實作物件
那么究竟這個物件是怎么給予這個屬性的?
uj5u.com熱心網友回復:
比如你在一個類上標記了@service這樣的注解,在sping中配置了自動掃描的包可以掃描到這個標記注解的類,sping會邊掃描邊通過反射創建一個物件,sping這個容器有一個存放鍵值對的資料結構(鍵是如果在注解上沒有指定就是類的全名的首字母小寫,值就是反射創建的物件),在controller類里面有一個service屬性,這個屬性添加了@Autowire注解,sping容器會在它管理的類里面查找和屬性名同名的鍵的物件賦值給這個屬性uj5u.com熱心網友回復:
就是springMVC在進行檔案操作的時候都有哪些類和介面?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/74635.html
標籤:Java EE
上一篇:我剛用Maven配置好ssm框架運行Tomcat就報錯誤了這是哪里的錯誤
下一篇:技術上抽象類是否能完全取代介面?
