@scope 控制物件作用域的 value屬性的取值有 singleton prototype
@postconstruct 控制物件初始化的標註 加在方法上
@predestroy 物件銷毀對應的標註 注意必須是單例的 主動關閉容器
配置檔案優先
1.@value
一般用於解決複雜值的注入 用法是@value("值")
用在成員變數 ,set方法
如果要1 複雜的值要結合springel------ #
2.@autowired
一般用來解決複雜值的注入
可以用在成員變數 set方法 構造方法
優先使用型別進行匹配 如果型別有對應的多個物件 則啟用名字匹配
可以使用@qualifier("元件的id") 這樣就可以按照指定的名字進行匹配 但是這樣對元件的
依賴屬於強依賴 可以通過@autowired 設定requried屬性為false 解除強依賴
3.@resource
一般用在 成員變數和set方法上
優先使用名字進行匹配 匹配不上會啟用型別進行匹配
這個標註是jdk中的標註
可以通過@resource 的 name 屬性 指定載入的元件 @resource(name="car")
不能解除強依賴
4.@required 是檢查乙個元件是否賦值 用於setter方法(若沒配置bean時會報錯,可通過這個屬性更改沒配置bean也不報錯)
5.@inject 註解可以出現在三種類成員之前,表示該成員需要注入依賴項。按執行時的處理順序這三種成員型別是:
(1)構造方法(2)set方法(3)字段
@inject註解的建構函式可以是無參或多個引數的建構函式。@inject每個類中最多註解乙個建構函式。
4.springdao 的優勢
對jdbc 進行了封裝 簡化了dao 實現類的編寫
spring dao 提供了基於aop 的宣告式事務
spring dao 對jdbc 中的異常做了封裝,把異常封裝成了 繼承自runtimeexception
的 dataacces***ception
springdao中的核心類
jdbctemplate 可以自動載入驅動 獲取連線 獲取sql執行環境 資源釋放
這個類的對應api可以完成增刪改查
jdbcdaosupport 可以提供jdbctemplate 型別的物件
提供模板物件時,這個類需要注入乙個datasource物件
利用繼承jdbcdaosupport 的方式 完成對一張表的資料量查詢
6.1 建立一張表 xdl_bank_account_35
id int pk
acc_no varchar(30) uk
acc_password text
acc_money double
插入測試資料 提交
6.2 建立乙個專案 匯入jar包(ioc aop dao 資料庫連線池 資料庫驅動) 拷貝配置檔案到src下
6.3 編寫乙個dao 介面 定義查詢方法
6.4 編寫dao 介面的實現類 繼承jdbcdaosupport 實現dao 介面
6.5 開啟元件掃瞄 給dao 的實現類的父類 注入datasource()
然後就可以使用父類獲取模板物件 完成查詢 在實現類上加對應的標註建立物件
6.6 從容器中獲取 dao 實現類對應的物件 測試查詢
//
注意jdbctemplate 無法直接把乙個結果集轉換成物件
結果集spring自動rs.next()
1.首先建立資料庫表和相應的字段,並建立約束
3. 開啟元件掃瞄,並且配置資料來源
4. 編寫乙個實體類(提供get set)方法,tostring(),有參和無參以及序列化
5. 設定乙個dao介面根據銀行賬號完成增刪改查
6. 實現dao介面,繼承jdbcdaosupport,在實現類上加上對應的標註,給jdbcdaosupport賦值datasource
7. 測試結果
查詢銀行賬戶的數量
1.建立乙個專案匯入jar包(ioc aop dao 連線池 資料庫驅動 ),拷貝容器對應的配置檔案到src下
2.在配置檔案中開啟元件掃瞄
3.寫乙個dao介面定義方法
4.在實現類定義乙個jdbctemplate的成員變數,在類上加@repository標註
5在注入jdbctemplate,jdbctemplate建立時要使用到datasource
6使用模板完成查詢
5.1 程式設計式事務管理
5.2 宣告式事務管理
讓業務元件 和 事務管理**分離,邏輯更加清晰 元件的復用程度更高 提高了程式的靈活性
1 開啟宣告式事務
2 建立事務管理器
這個元件依賴於datasource
3 在需要事務管理的類上 或者方法上加 @transactional
8.@transactional 的屬性
spring 事務管理器 預設只針對執行時異常進行回滾 對檢查異常不回滾
可以通過 rollbackfor 屬性可以指定對應的檢查異常回滾。
norollbackfor 針對指定的執行時異常 不回滾
readonly 唯讀 如果事務方法中所有的sql 語句都是select 則
readonly 會對方法進行效率上的優化 。只要有dml 則改屬性無效。
isolation 隔離級別 事務的隔離級別有四個
讀未提交 讀提交 可重複讀 序列化
髒讀: 乙個事務讀取到了另外乙個事務沒有提交的資料
不可重複讀: 乙個事務讀取乙份資料 另外乙個事務修改了這份資料 並進行了提交
這個事務再次讀取這份資料時 發現資料發生了改變。
幻讀:乙個事務讀取了整張表的資料 另外乙個事務 增加了一些資料 並進行了提交
當第乙個事務再次統計資料時 發現資料改變了。
propagation 傳播特性
乙個方法呼叫乙個事務方法時 事務應該如何表現
required 如果當前方法沒有事務 則開啟新事務,如果當前方法有事務 則加入到
當前事務之中。
propagation_supports 如果存在乙個事務,支援當前事務。如果沒有事務,則非事務的執行。但是對於事務同步的事務管理器,propagation_supports與不使用事務有少許不同。
propagation_mandatory 如果已經存在乙個事務,支援當前事務。如果沒有乙個活動的事務,則丟擲異常。
propagation_requires_new 總是開啟乙個新的事務。如果乙個事務已經存在,則將這個存在的事務掛起。
propagation_not_supported 總是非事務地執行,並掛起任何存在的事務。
propagation_never 總是非事務地執行,如果存在乙個活動事務,則丟擲異常
propagation_nested 如果乙個活動的事務存在,則執行在乙個巢狀的事務中. 如果沒有活動事務, 則按transactiondefinition.propagation_required 屬性執行
nullpointerexception classnotfoundexception arrayindexoutofbound***ception
indexoutofbound***ception numberformatexception arithmeticexception
classcastexception
ioexception、sqlexception等以及使用者自定義的exception異常
spring 元件掃瞄
有的時候我們的xml中有過多的配置,很繁瑣,為了簡化配置我們使用context中的元件掃瞄的方式,將一部分類直接交付給spring管理。xml中的配置如下。xmlns xmlns xsi xmlns context xsi schemalocation spring beans.xsd spring...
Spring 掃瞄元件
掃瞄元件,對設定的包下面的類進行掃瞄,會講加上註解的類作為spring的元件進行載入 元件 指spring中管理的bean 作為spring的元件進行載入 會自動在spring的配置檔案中生成相對應的bean,這些bean的id會以類的首字母小寫為值 在設定的包結構下,在此通過註解或型別包含某個或某...
Spring自動掃瞄元件
通常情況下,宣告所有的bean類或元件的xml bean配置檔案,這樣spring容器可以檢測並註冊bean類或元件。其實,spring是能夠自動掃瞄,檢測和預定義的專案包並例項化bean,不再有繁瑣的bean類宣告在xml檔案中。下面是乙個簡單的spring專案,包括客戶服務和dao層。讓我們來 ...