1. 程式人生 > >8. Spring 註解 大全

8. Spring 註解 大全

Spring 註解

--------------------------------------------------------------------------------------------

常用:

1. bean : 開啟 <context:annotation-config/>

    (1) @Component 宣告物件

    (2) @Controller宣告物件 >> MVC 網頁提交類 必須用次註解

    (3) @Service宣告物件

    (4) @Repository宣告物件

        ① @Require 根據id

        ② @Autowired 根據name

2. aop : 開啟 <aop:aspectj-autoproxy/>

    (1) @Aspect 宣告aop

        ① @pointcut 宣告切點

            1) @Before 之前

            2) @After 之後

            3) @Around環繞

            4) @AfterReturning最終

3. tx : 開啟 <tx:annotation-driven transaction-manager="txManager" />

    (1) @Transaction 宣告

-------------------------------------------------------------------------------------------------------------------------------------------------------

bean註解(實體類)

開啟註解建立bean

`<context:component-scan base-package="cn.po"/>`

建立bean的註解

註解

描述

@Component

基礎

@Controller

WEB層

@Service

業務層

@Repository

持久層

l 這四個表示作用一致,其區別是區分建立的層次,暫時沒有功能上的意義

開啟註解注入

`<context:annotation-config/>`

主要注入註解

註解

描述

@Required 註解應用於 bean 屬性的 setter 方法。

@Autowired 註解可以應用到 bean 屬性的 setter 方法,非 setter 方法,建構函式和屬性。

通過指定確切的將被連線的 bean,@Autowired 和 @Qualifier 註解可以用來刪除混亂。

Spring 支援 JSR-250 的基礎的註解,其中包括了 @Resource,@PostConstruct 和 @PreDestroy 註解。

@Required 註解

@Required註解用於bean屬性的setter方法,它表明受影響的bean屬性在配置時必須放在XML檔案中,否則容器會丟擲一個BeanInitializationException異常

l @Required註解的方法,必須注入屬性

l 標記範圍:setter方法

@Autowired 註解

@Autowired註解對它可以對類成員變數、方法及建構函式進行標註,完成自動裝配的工作

替換xml的`<property name="屬性名" value=" 屬性值"/>`

l @Autowired註解的方法,可以自動裝配改方法的對應的屬性值

l 標記範圍:setter方法和屬性

Required : 強調ById;

Autowired: 強調ByName;

@Autowired (required=false)

預設情況下,@Autowired 註釋意味著依賴是必須的,它類似於 @Required 註釋,然而,你可以使用 @Autowired required=false選項關閉預設行為。

l @Autowired方法也具有必須注入的屬性

l @Autowired(reqyured=fakse)設定可以不必注入屬性

@Qualifier註解

@Qualifier註解當你建立多個bean時,並且想要用一個屬性進行注入.可以同時使用@Qualifier和@Autowired指定哪個是真正的bean裝配.

l @Qualifier(“指定bean物件名”),指定了改屬性必須裝配的物件

AOP註解(切面)

開啟AOP註解

`<aop:aspectj-autoproxy/>`

l 需要提供的jar包

1. aspectjrt.jar

2. aspectjweaver.jar

3. aspectj.jar

4. aopalliance.jar

@Aspect在方法之前

l 表明該方法是一個切面(即插入的一個增強的方法)

宣告切入點@Pointcut

@pointcut(execution(* com.biz.*.*(..)))

l 在@Aspect宣告的類中宣告哪些類和方法是需要加入切點(位置在第一個方法之前)

宣告通知方式

註解

描述

示例

@Before

之前通知

@Before("方法名()")

@After

之後通知

@After("方法名()")

@AfterReturning

後置通知

@AfterReturning(pointcut = "方法名()", returning="retVal")

@AfterThrowing

異常通知

@AfterThrowing(pointcut = "方法名()", throwing="ex")

@Around

環繞通知

@Around("方法名()")

@Transaction註解(事務)

開啟事務註解

`<tx:annotation-driven transaction-manager="txManager" />`

宣告@Transaction

使用範圍

描述

介面\介面方法

public的介面和方法

必須使用基於介面的代理

類\類方法

public的類和方法

@Transaction 的屬性

屬性

型別

描述

value

String

可選的限定描述符,指定使用的事務管理器

enum: Propagation

可選的事務傳播行為設定

enum: Isolation

可選的事務隔離級別設定

boolean

讀寫或只讀事務,預設讀寫

int (in seconds granularity)

事務超時時間設定

rollbackFor

Class物件陣列,必須繼承自Throwable

導致事務回滾的異常類陣列

rollbackForClassName

類名陣列,必須繼承自Throwable

導致事務回滾的異常類名字陣列

noRollbackFor

Class物件陣列,必須繼承自Throwable

不會導致事務回滾的異常類陣列

noRollbackForClassName

類名陣列,必須繼承自Throwable

不會導致事務回滾的異常類名字陣列

事務的隔離級別 ---> isolation=” ”

l 事務的隔離級別是指若干個併發的事務之間的隔離程度,如表定義了五種隔離級別:

翻譯

描述

預設

DEFAULT

表示使用底層資料庫的預設隔離級別.通常是指的READ_COMMITTED

讀未提交的

READ_UNCOMMITTED

表示一個事務可以讀取,另一個事務修改但是沒有提交的資料.

該級別不能防止髒讀去\不可重複讀取/幻讀,因此很少使用.

讀提交的

READ_COMMITTED

表示一個事務只能讀取已經提交的資料.

推薦使用的隔離

可重複讀

REPEATABLE_READ

表示一個事務在整個過程中可以多次重複執行摸個查詢,並且每次返回的記錄都相同,該級別可以防止髒讀\不可重複讀.

序列化

SERIALIZABLE

所有的事務依次逐個執行,這樣事務之間就不會產生干擾,但是及其影響效能.

事務的傳播行為 ---> propagation=” ”

l 所謂的事務的傳播行為是指,如果在事務開始之前,一個事務上下文已經存在,此時有若干選項可以指定一個事務性方法的執行行為.Transaction中指定了如表幾種傳播行為:

翻譯

描述

要求

REQUIRED

如果當前存在事務,則加入該事務;

如果沒有,則建立一個事務;

需要新的

REQUIRES_NEW

建立一個新的事務,如果當前存在事務,則把當前事務掛起;

支援

SUPPORTS

如果當前存在事務,則加入該事務;

如果沒有事務,則以非事務的方法執行;

不支援

NOT_SUPPORTED

以非實物的方式執行,如果當前存在事務,則把當前事務掛起;

從來沒有

NEVER

以非實物進行執行,如果當前存在事務,則丟擲異常

強制性的

MANDATORY

如果當前存在事務,則加入事務;

如果當前沒有事務,則丟擲異常;

巢狀的

NESTED

如果當前存在事務,則建立事務作為當前事物的巢狀事務來執行;

如果當前沒有事務,則建立一個事務;

l 表名該事務是否可以修改資料

l 預設 : 讀寫

l 建議不寫,使用預設

事務的超時 ---> timeout=” ”

l 指一個事務允許執行的最長時間,如果超時則回滾事務.

l 單位 : 秒

l 預設 : none (沒有限制)