SSH框架 註解配置,bean註解 事物註解等

2021-07-24 22:18:56 字數 2992 閱讀 6187

2.檔案內部配置

bean註解管理

spring自動掃瞄管理bean註解有四種配置模式,如下

@service     用於業務層(service) 示例:@service("baseservice")

@controller  用於控制層(action)  示例:@controller("baseaction")

@repository  用於資料訪問層(dao) 示例:@repository("basedao")

@component   泛型配置(當元件不確定時用),以上3種配置是基於此擴充套件

推薦不同分層採用對應的配置,切忌所有配置都使用@component

spring事物註解配置

@transactional            //預設事務配置

@transactional(rollbackfor=exception.class) //出現exception異常也回滾

@transactional(norollbackfor=exception.class) //出現exception異常不回滾

@transactional(readonly=true) //唯讀,效能優化,效率高

@transactional(propagation=propagation.not_supported)  //不開啟事務

@transactional(propagation=propagation.required) //如果有事務,那麼加入事務,沒有的話新建乙個(不寫的情況下)

@transactional(propagation=propagation.not_supported) //容器不為這個方法開啟事務

@transactional(propagation=propagation.requires_new) //不管是否存在事務,都建立乙個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務

@transactional(propagation=propagation.mandatory) //必須在乙個已有的事務中執行,否則丟擲異常

@transactional(propagation=propagation.never) //必須在乙個沒有的事務中執行,否則丟擲異常(與propagation.mandatory相反)

@transactional(propagation=propagation.supports) //如果其他bean呼叫這個方法,在其他bean中宣告事務,那就用事務.如果其他bean沒有宣告事務,那就不用事務.

@transactional(propagation=propagation.nested)

@transactional(propagation = propagation.required,readonly=true) //readonly=true唯讀,不能更新,刪除

@transactional(propagation = propagation.required,timeout=30)//設定超時時間

@transactional(propagation = propagation.required,isolation=isolation.default)//設定資料庫隔離級別

註解事物是可以依賴類繼承而繼承的,例如某個service繼承了baseservice,那麼它也會繼承baseservice的事物宣告

屌絲們可以根據不同需求配置不同事物傳播屬性,下面是常見的事物隔離級別和傳播屬性:

1.事務的隔離級別

default

採用資料庫預設隔離級別

read_uncommitted

讀未提交資料( 會出現髒讀,不可重複讀,幻讀 ,避免了 第一類丟失 更新 )

read_committed

讀已提交的資料(會出現不可重複讀,幻讀)

repeatable_read

可重複讀(會出現幻讀)

serializable

序列化2. 事務的傳播屬性

required

需要事務,存在:加入,不存在:自己建立.這是spring預設的傳播行為.

supports

支援事務, 存在:加入,不存在:不使用事務

mandatory

只能在乙個已存在事務中執行,業務方法不能發起自己的事務,如果業務方法在沒有事務的環境下呼叫,就拋異常

requires_new

業務方法總是會為自己發起乙個新的事務,如果方法已執行在乙個事務中,則原有事務被掛起,新的事務被建立,直到方法結束,新事務才結束,原先的事務才會恢復執行.

not_supported

宣告方法需要事務,如果方法沒有關聯到乙個事務,容器不會為它開啟事務.如果方法在乙個事務中被呼叫,該事務會被掛起,在方法呼叫結束後,原先的事務便會恢復執行.

propagation_never

宣告方法絕對不能在事務範圍內執行,如果方法在某個事務範圍內執行,容器就拋異常.只有沒關聯到事務,才正常執行.

nested

巢狀事務(一般資料庫不支援)

action註解單例問題

交有spring管理後,action預設是單例模式。但是專案不能全部都採用單例,使用我們需要加入相關註解切換為非單例:

在action上面配置,@scope("prototype") ,每個請求都會new乙個新的例項

bean初始化執行配置(伺服器啟動時就執行)

要想在bean初始化的時候就執行某個方法可使用註解@postconstruct,同樣有初始化就有結束@predestroy

@postconstruct

public void init()

@predestroy

public void destory()

推薦單例模式使用,如果bean類配置@scope("prototype") 那該bean類只有在呼叫是才被初始化,

相當於init方法也只能在bean被呼叫是才執行,而且bean的每次呼叫都會執行

轉,初始化執行的詳細,及xml配置介紹:

spring框架通過註解配置bean

首先新建乙個beansannotation.xml的檔案,然後要引入context命名空間,通過註解配置bean,使用標籤。xmlns xmlns xsi xmlns context xsi schemalocation spring beans.xsd spring context 4.0.xsd...

SSH註解配置

1.頭部宣告需加入 xmlns context spring context 3.0.xsd 2.檔案內部配置 context annotation config context component scan base package com.newer bean註解管理 spring自動掃瞄管理b...

ssh註解配置

1.頭部宣告需加入 xmlns context spring context 3.0.xsd 2.檔案內部配置 context annotation config context component scan base package com.newer bean註解管理 spring自動掃瞄管理b...