Spring學習第三話 元件掃瞄及註解

2021-10-06 21:54:09 字數 4106 閱讀 7315

@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層。讓我們來 ...