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 (沒有限制)