構造器方式例項化
預設呼叫這個型別的無參構造
靜態工廠方法例項化
本質上呼叫乙個靜態方法,獲取乙個物件
例項工廠方法例項化
本質上就是利用已存在的物件,呼叫成員方法,獲取另乙個型別的物件
把乙個物件是否單例也要看成作用域,預設spring容器中的物件是單例的;可以通過bean標記的scope屬性指定成別的作用域
如:prototype這是非單例 request、session等再web才會涉及
初始化當容器建立之後可以通過bean標記的default-init-method=「方法名」 這樣容器中所有型別對應的物件都會走這個初始化方法,這樣影響比較大,所以某個型別中沒有對應的初始化方法也很正常,這樣容器是不會報錯的;也可以通過bean標記的init-method來指定初始化方法,這樣影響物件是比較精準的,如果物件中沒有對應的初始化方法是會報錯的。
銷毀當容器總的物件即將銷毀,可以通過bean標記的default-destroy-method=」方法名「,這樣容器中所有型別對應的物件,都會走這個方法。這樣的影響範圍也比較大,所以某個型別對應的物件沒有對應的銷毀方法也不會報錯;也可以通過bean標記的destory-method來指定銷毀方法,這樣影響的物件是比較精準的,如果這個物件沒有對應的銷毀方法,則程式會報錯
*注意銷毀方法只針對單例模式,非單例模式需要手工呼叫
di有三種注入方式
setter注入
基於set方法注入
如果是簡單值(八種基本型別和封裝類 string 、列舉)的賦值,直接使用value賦值
如果是複雜值,則使用 ref 進行賦值 ref=「物件在容器中的id」
//屬性名就是set方法去掉set 首字母小寫
構造器注入
參考的是構造方法,構造方法看的是構造方法上的引數
//屬性名是set方法去掉set 首字母小寫
如果是簡單值(八種基本型別 和 封裝類 string類 、列舉)的賦值直接用value賦值
如果是複雜值賦值,則使用ref ref=「物件在容器中的id」
//上面的name也可以index 用引數的位置來賦值
和setter注入不同的是,構造器注入必須有對應的構造方法
自動化注入
可以在bean標記中加乙個屬性叫autowire 賦值有 byname、bytype、constructro、
byname參考的是set方法,如果第乙個不匹配 還會繼續
bytype參考的是成員變數的型別,如果第乙個不匹配,則會繼續
constructor會按照構造方法去找,如果第乙個都找不到;則會終止查詢。但不報錯;
如果找到了對應的值,先會按照型別匹配,如果如衝突則會啟用名字查詢
引數的注入
簡單值的注入
基本資料型別 封裝類 string 列舉 直接使用value進行注入
可以使用 < value> 標記取代value屬性 這樣就不用加雙引號了
也可以< null/>進行標記 意為賦值null
複雜之的注入
把上面的value換成ref即可
集合引數的注入(list set map properties)
list
值
值
set
值
值
map
properties
值值值
集合引數的單獨定義
拷貝過來 加 屬性集合單獨定義時 還可以直接關聯乙個配置檔案
獲取spring 容器中物件的值或者是物件的屬性值 語法是 把之前的$ 換成 #
什麼是元件掃瞄
component scan 元件掃瞄 他是spring基於標註(註解)的技術,為了簡化spring中xml的配置編寫的
在使用元件掃瞄時要記得在spring容器中開啟元件掃瞄
@component 通用標註層
@respository 持久層標註 針對dao層
@service 服務層標註
@controller 控制層標註
元件掃瞄相關的其他標註:
控制物件作用域的標註 @scope(prototype | singleton)
物件初始化的標註 @postconstruct
物件銷毀的標註 @predestory
和di相關的標註
@value 可以用在成員標量set方法上,它解決的是簡單之的裝配問題
寫法是 @value(「值」);
如果是複雜值裝配,則需要el表示式
寫法是 @value("#")
@autowired
可以用在成員變數 set方法 構造方法上
它解決的是複雜值的裝配問題,優先以型別進行匹配,如有衝突則啟用名字進行匹配
可以配合@quailfier 來指定名字進行查詢 但是這個不能用在構造方法上
查詢的元件預設是強依賴。可以通過required=false進行改變,當是false時 會盡量去查詢,找不到也不會報錯
@resource
可以用在成員變數 set方法上
它解決的是複雜值的裝配問題,優先按照名字進行查詢,如果找不到則啟用型別查詢
這個標註是jdk中的標註,不能解決強依賴。
簡化了dao實現類的編寫,對jdbc訪問資料庫做了高度封裝,提供了基於aop的特性
對jdbc的異常做了封裝。由繼承原來的sqlexception 變成了 runtimeexception的dataacces***ception
繼承jdbcdaosupport的方式來使用springdao
也可以不繼承jdbcdaosupport的方式使用springdao
spring中的事務管理形式
程式設計式的事務管理
基於aop宣告式的事務管理
宣告式事務管理的實現步驟
簡單實踐spring框架 手寫spring
我們認識的spring ioc 無非就是在類上加乙個 component,service,controller,repository這些註解,這樣就代表了將這個類或者說物件交給了spring管理,由spring為我們建立物件,而我們只需要在其他的類的成員位置定義該物件的物件名並在其上面加上 reso...
Spring框架 Spring的環繞通知
問題 當我們配置了環繞通知之後,切入點方法沒有執行,而通知方法執行了 環繞通知 問題 當我們配置了環繞通知之後,切入點方法沒有執行,而通知方法執行了 public void aroundprintlog 配置環繞通知 詳細的注釋請看logger類中 問題 當我們配置了環繞通知之後,切入點方法沒有執行...
Spring框架學習
技術人員每到乙個階段就會遇到乙個天花板,這表明你在這個階段已經積累足夠,需要突破了,如果技術人員發現自己從來沒有天花板,這說明你從來不懂的去反思去沉澱,去優化你的知識儲備。因為不同階段的技術儲備,在眾多職業道路上,可能造就一種從基本研發人員到職業架構師的轉變的職業道路,這可以說是從技術演變上的職業發...