問題:乙個業務類交給spring管理,並自動注入了其他業務類作為屬性,方法中通過全域性屬性呼叫其他業務類的方法。當該業務類是通過new獲取的情況下,該例項的屬性會是null(不存在依賴注入例項),呼叫方法就會報空指標。
為保證該方法無論是被new出來的物件呼叫還是被spring容器物件引用都能正常使用,方法中就要 使用spring管理的類 。
獲取spring管理的物件:
object obj=wac.getbean(beanid);
spring的ioc和di理解:
控制反**物件例項在spring啟動後都會被建立,只需要從容器中獲取就可以使用。可以通過xml配置bean的方法獲取,也可以通過註解掃瞄的方法建立。@component
依賴注入:字面意思指的是類的屬性例項化過程。在獲取到被spring管理的物件時,該物件的屬性如果在spring容器也存在例項,那麼可以直接從spring獲取(注入),
也就是該類的屬性依賴於物件本身的例項化而例項化。如果物件不是從容器獲取,那麼它的屬性也不會從容器例項化。可以通過xml配置注入,也可以通過在可掃瞄類下加@autowired依賴注入。
di:
不管是物件導向, 還是面向過程, 都需要分成許多的塊, 然後由這些部件協同工作完成任務
要協同工作就會產生依賴, 乙個方法呼叫另乙個方法, 乙個物件包含另乙個物件
如果物件 a 包含物件 b 的話, 就需要在 a 裡
new
乙個 b
依賴注入從具體類 b 裡抽象出介面 ib——ib 的具體實現可能有很多 b,b1,b2...很多種——
這樣 a 可以不用再
new
具體的 b 了, 而是跟 ioc 容器說: 我要乙個 ib(getbean(
"ib"
)) 。
然後, 由容器根據配置檔案來做具體的
new
的工作。 具體
new
的是哪個, 由配置檔案從代
碼外部決定, 要更換成 b,b1,或是 b2...修改配置檔案就能做到, 不用再改**了
總結:new物件與spring管理的物件沒有關聯。new物件並沒有spring參與管理,它的屬性不存在依賴注入,它的屬性要手動例項化。spring管理的物件與它的屬性(被注入的屬性)存在依賴關係;
spring 依賴注入 Spring依賴注入
依賴注入 dependency injection,簡稱di 與控制反轉 ioc 的含義相同控制反 在使用spring框架之後,物件的例項不再由呼叫者來建立,而是由spring容器來建立,spring容器會負責控制程式之間的關係,而不是由呼叫者的程式 直接控制,這樣控制權由應用程式轉移到了sprin...
Spring依賴注入
所謂依賴注入,是指在程式執行過程中,如果需要呼叫另乙個物件協助時,無須在 中建立按被呼叫者,而是依賴外部注入。spring 的依賴注入對呼叫者和被呼叫者幾乎沒有任何要求,完全支援對 pojo 之間依賴關係的管理。依賴注入的兩種方式 1 設值注入 設值注入是指通過 setter 方法傳入被呼叫者的例項...
SPring依賴注入
所謂依賴注入,是指在程式執行過程中,如果需要呼叫另乙個物件協助時,無須在 中建立按被呼叫者,而是依賴外部注入。spring的依賴注入對呼叫者和被呼叫者幾乎沒有任何要求,完全支援對pojo之間依賴關係的管理。依賴注入的兩種方式 1 設值注入 設值注入是指通過setter方法傳入被呼叫者的例項。這種注入...