Java Spring 常見註解彙總

———持續更新ing———

註解和在XML文件中配置是等價

目錄:
A @After @AfterReturning @AfterThrowing @ApiOperation @ApiParam @Around @Aspect @AssertFalse @AssertTrue @Async @Autowired
B @Bean @Before
C @Cacheable @CacheEvict @CachePut @Configurable @Configuration @Controller @Component @ComponentScan @CreditCardNumber
D @DecimalMax @DecimalMin @DependsOn @Deprecated @Digits @Document
E @Email @EnableAutoConfiguration @EnableEurekaClient @EnableEurekaServer
F@Future
I @ImportResource @InjectLogger @Inherited
J @JsonBackReference @JsonDeserialize @JsonFormat @JsonIgnore @JsonIgnoreProperties @JsonManagedReference @JsonProperty @JsonPropertyOrder @JsonSerialize @JsonUnwrapped @JsonView
L @Lazy @Length
M @Max @Min @ModelAttribute
N @Name @NotBlank @NotEmpty @NotNull @Null
O @Override
P @Passt @PathVariable @Pattern @PersistenceContext @PersistenceUnit @PostConstruct @PreDestroy @Primary
Q @Range @Qualifier
R @Range @RedisData @Repository @RequestBody @RequestParam @RequestMapping @Resource @ResponseBody @RestController @Retention
S @SafeHtml @ScriptAssert @Scope @Service @Size @SpringBootApplication @SuppressWarnings
T @Target @Transactional
U @URL
V @Value @Valid @Validated
W @WriteDS


元註解:@Retention、@Target、@Document、@Inherited

@Retention 註解的保留位置

@Retention(RetentionPolicy.SOURCE)   //註解僅存在於源碼中,在class字節碼文件中不包含
@Retention(RetentionPolicy.CLASS)     // 默認的保留策略,註解會在class字節碼文件中存在,但運行時無法獲得,
@Retention(RetentionPolicy.RUNTIME)  // 註解會在class字節碼文件中存在,在運行時可以通過反射獲取到

@Target 設定註解使用範圍
Target通過ElementType來指定註解可使用範圍的枚舉集合

@Document 該註解將會被包含在javadoc中

@Inherited 子類可繼承父類的該註解


@Controller 標註控制層組件
如Struts中的action

@Service 標註業務層組件

@Repository 標註數據訪問層組件
即DAO層 一般標註在DaoImp實現層

@Component 標註組件
註釋在被掃描和裝配的類上
泛指的組件,不好歸類的時候使用
將POJO實例化到Spring容器中
相當於xml中的<bean>

@Configuration 配置文件類
標註在類上,該類是用來配置Spring中Bean的配置文件。取代Beans.xml

@Bean Bean方法
註釋在方法上,顯示聲明
相當於xml文件中的<bean>,被註釋的方法產生一個Bean交給Spring容器

@RestController 標識一個類是REST風格的控制器類
繼承自@Controller,相當於@Controller+@ResponseBody
當返回數據不是html標籤頁面,而是json、xml等的時候使用

@configurable 對bean進行自動裝配
對類進行標註
屬性:
autowire
- @Configurable(autowire=Autowire.BY_TYPE) 按類型自動裝配
- @Configurable(autowire=Autowire.BY_NAME)按名字自動裝配

@Autowired 自動裝配
對成員變量、方法和構造函數進行標註
默認先byType再byName

@Resource 自動裝配
和@Autowired一樣,也可對字段或屬性進行標註。
默認先byName,若沒有則byType
據說byName會更快,因此大項目更推薦用@Resource

@Primary 優先注入
當Spring根據Type等無法確定注入哪個,選擇標註了@Primary的

@EnableAutoConfiguration 自動裝配
官翻:一般在標註在main函數上,會根據已經部署的jar依賴告訴Spring Boot“猜測”你想如何配置Spring

@SpringBootApplication 自動裝配
這個就厲害了。相當於@ Configuration+@EnableAutoConfiguration+@ ComponentScan,並具有他們的默認屬性。

@ComponentScan 組件掃描
對應於xml中的<context:component-scan>,可以自動掃描basePackage下面的有@Component、@Controller、@Service標註的類,並註冊爲bean
一般放在啓動類中指明掃描範圍
@ComponentScan("包地址")

@Scope 指明Bean的作用域
@Scope(“singleton”),默認,Spring IOC容器只會創建該bean定義的唯一實例。
@Scope(“prototype”),每一次請求(將其注入到另一個bean中,或者以程序的方式調用容器的 getBean()方法)都會產生一個新的bean實例,相當與一個new的操作。
@Scope(“request”),表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效。
@Scope(“session”),表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效。
@Scope(“global session”),類似於標準的HTTP Session作用域,不過它僅僅在基於portlet的web應用中才有意義。

@Qualifier 指明被裝配者
輔助@Autowired,當裝配到同類多個型的bean時,通過@Qualifier("beanId")來指明你需要是具體是哪個

@PostConstruct 生命週期註解
被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,並且只會被服務器調用一次,類似於Serclet的inti()方法。被@PostConstruct修飾的方法會在構造函數之後,init()方法之前運行。

@PreDestroy 生命週期註解

被@PreConstruct修飾的方法會在服務器卸載Servlet的時候運行,並且只會被服務器調用一次,類似於Servlet的destroy()方法。被@PreConstruct修飾的方法會在destroy()方法之後運行,在Servlet被徹底卸載之前。
這裏寫圖片描述

@RequestMapping 配置URI映射
參數:
value 請求地址
-普通地址(直接指出,value指出)
-帶有變量的地址
-帶有正則表達式的地址{變量1:表達式1}.{變量2:表達式2}
method 請求方法 (GET、POST)
consumes 提交內容類型
produces 返回內容類型 -params 請求參數
headers 頭

例子:

@Controller
@RequestMapping("/class_uri")   
public class DemoController{

    //直接URI 
    @RequestMapping("/invisiblevalue")  
    public void invisibleValueMethod(){...} 

    //value指出URI    
    @RequestMapping(value="/visiblevalue")  
    public void visibleValueMethod(){...}   

    //URI帶參數
    @RequestMapping(value="/user/{userID}") 
    public void URIWithParams(@PathVariable String userID){...}

    //帶正則表達式
    @RequestMapping(value="/{username:[a-z-]+}")    
    public void regularExpression( @PathVariable String username){...}

    //請求方法
    @RequestMapping(value="/{userId}",method=RequestMethod.GET)
    public void requestMethod( @PathVariable String userId){...}

    //約束提交內容類型
    //例子爲該方法僅處理 提交內容類型爲“application/json”類型的請求
    @RequestMapping(value="/user",method=RequestMethod.POST,consumes="application/json")
    public void submitType(@RequestBody User user){...}

    //約束返回內容類型
    //例子爲該方法僅處理 返回內容類型爲“application/json”類型的請求
    @RequestMapping(value="/user",method=RequestMethod.POST,produces="application/json")
    public void returnType(@RequestBody User user){...}

    //約束請求參數
    //例子表示,請求參數中userID必須爲1,userName不能爲"jack"
    @RequestMapping(value="/user",method=RequestMethod.GET,params={"userID=1","userName!=jack"})
    public void requestParams(){...}

    //約束請求頭
    //例子表示,請求頭中Refer的值必須爲http://www.123.com
    @RequestMapping(value="/user",method=RequestMethod.GET,headers="Refer=hhttp://www.123.com")
    public void requestHeaders(){...}}

@PathVariable 處理參數
處理URL如 localhost:8080/user/1 時的參數

@RequestParam 處理參數
處理URL如 localhost:8080/user?id=1時的參數

@RequestBody 處理請求體
通常用來處理content-type不是默認編碼而是application/json類型的請求體
可將字符串自動綁定到相應的bean上,相應的字符串上。

@ResponseBody 處理返回體
通常用來處理json、xml格式的數據。

@ModelAttribute 對象綁定

@Aspect 面向切面編程
Spring AOP 中用來自定義切面

@Before 方法前執行
在某連接點之前執行的通知,但這個通知不能阻止連接點之前的執行流程(除非它拋出一個異常)。

@After 方法後執行
當某連接點退出的時候執行的通知(不論是正常返回還是異常退出,類似於finally)。

@AfterReturning 運行方法後執行
在某連接點正常完成後執行的通知

@AfterThrowing Throw後執行
在方法拋出異常退出時執行的通知。

@Around 環繞執行
包圍一個連接點的通知,如方法調用。
這是最強大的一種通知類型。
環繞通知可以在方法調用前後完成自定義的行爲。它也會選擇是否繼續執行連接點或直接返回它自己的返回值或拋出異常來結束執行。

@Override 重寫
可寫可不寫,幫助檢查重寫的正確性

@InjectLogger 注入日誌

@ImportResource 資源文件讀取
註釋類
@ImportResource(“配置文件地址”)

@Value 資源屬性讀取
註釋屬性
讀取資源時候的屬性讀取
相當於xml中的<property>中的value

@value("${jdbc.url}")
private String url;

相當於xml中的
<property name="url" value="${jdbc.url}"/>

@Deprecated 廢棄
標註該類/接口/方法/字段不再推薦使用
如果被使用,編譯器會提示警告信息

@SuppressWarnings 抑制警告
可標註在類/接口/方法/字段前

@SuppressWarnings("警告類型")
@SuppressWarnings(value={"類型1","類型2"})

-all 抑制所有的警告
-boxing 抑制拆箱、裝箱有關的警告
-cast 抑制映射相關的警告
-dep-ann 抑制過期註釋的警告
-deprecation 抑制過期方法的警告
-fallthrough 抑制在switch語句中缺失breaks的警告
-finally 抑制finally模塊沒有返回的警告
-hiding 抑制本地隱藏變量的警告
-incomplete-switch 抑制switch語句不完整的警告
-nls 抑制非nls格式的字符串的警告
-null 抑制null分析的警告
-rawtypes 抑制在泛化類參數的時候沒有指定相應類型的警告
-restriction 抑制使用了被勸阻的或者被禁止的引用的警告
-serial 抑制在serializable類中沒有聲明serialVersionUID變量的警告
-static-access 抑制不正確的靜態訪問方式的警告
-synthetic-access 抑制子類沒有按最優方法訪問內部類的警告
-unchecked 抑制沒有進行類型檢查操作的警告
-unqualified-field-access 抑制沒有權限訪問的域的警告
-unused 抑制沒有被使用過的代碼的警告

@Transactional 事務管理
只能標註在public方法上,採用Spring事務管理器
若標註在類前,則類中所有方法都講進行事務處理。

傳播行爲:@Transactional(propagatio=xxx)
- REQUIRED :默認,如果有事務則加入,如果沒有則新建
- REQUIRED :默認,如果有事務則加入,如果沒有則新建
- NOT_SUPPORTED:必須在一個已有事務中執行,否則拋異常
- MANDATORY:必須在一個已有事務中執行,否則拋異常
- NEVER:必須在沒有的事務中執行,否則拋異常(和上面相反)
- SUPPORTS:當其他bean調用該方法,如果bean中有事務則也用事務,若bean中沒有則不用。

超時:@Transactional(timeout=30) //默認是30秒
隔離級別:@Transactional(isolation = Isolation.xxx)
- READ_UNCOMMITTED:讀取未提交數據(會出現髒讀, 不可重複讀) 基本不使用
- READ_COMMITTED:讀取已提交數據(會出現不可重複讀和幻讀)
- REPEATABLE_READ:可重複讀(會出現幻讀)
- SERIALIZABLE:串行化

 - MYSQL: 默認爲REPEATABLE_READ級別
 - SQLSERVER: 默認爲READ_COMMITTED

@Cacheable 緩存
被聲明方法的返回值應該被緩存

@CachePut 緩存
被聲明方法的返回值應該被緩存,和Cacheable不同的是,它每次都會出發真實的調用

@CacheFlush 清空緩存
聲明一個方法是清空緩存的觸發器

@RedisData Redis數據
標識Redis緩存數據

 @RedisData(name = "DataName", cluster = "ClusterName")
 private dataType dataName;

@JsonView 過濾序列化對象的字段屬性
標註在屬性或方法上
可以有選擇的序列化對象
http://blog.csdn.net/gefangshuai/article/details/50328361

@JsonIgnore 過濾序列化對象的字段屬性
標註在屬性或方法上
在json序列化時將java bean的一些屬性忽略掉
序列化和反序列化都受影響

@JsonIgnoreProperties 過濾序列化對象的字段屬性
標註在類上
在json序列化時將java bean的一些屬性忽略掉
序列化和反序列化都受影響

@JsonManagedReference 放在父類中
標註在屬性或方法上
可解決對象中存在雙向引用導致的無限遞歸問題

@JsonBackReference 放在子類中
標註在屬性或方法上
可解決對象中存在雙向引用導致的無限遞歸問題

@JsonSerialize 自定義序列化
標註在屬性或getter方法上
在序列化時嵌入自定義的代碼

@JsonDeserialize 自定義反序列化
標註在屬性或setter方法上
在反序列化時嵌入自定義的代碼

@JsonProperty 屬性別名
標註在屬性上
將該屬性名序列化爲另外的別名
反序列化也有用

@JsonPropertyOrder 屬性排序
標註在類上

@JsonUnwrapped 去包裝
標註在屬性或方法上
將子json對象的屬性添加到封閉的json對象中
{“id”:111,”name”:{“firstName”:”張”,”secondName”:”三”}}
加了@JsonUnwrapped後是{“id”:111,”firstName”:”張”,”secondName”:”三”}

@JsonFormat json類型格式化
標註在屬性或方法上
@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)

@DependsOn 前置依賴
修飾bean活方法
有一些bean需要在本bean初始化前就已經初始化完成,用該註釋可強制初始化這些bean
@DependsOn({"beanA","beanB"})

@Lazy 延遲初始化
修飾bean,
所有bean默認lazy是false的,即在IoC容器初始化啓動的時候,該bean無論是否被使用到,都進行初始化。
設置了@lazy(true)的bean施行延遲初始化,再第一次被調用的時候纔開始實例化

@Async 異步方法調用
修飾方法
這些方法在執行的時候將在獨立的線程中執行,調用者無需等待它的完成,即可繼續其他的操作

@EnableEurekaClient 註冊Eureka客戶端
註釋在啓動類上
Eureka是Netflix的一個開源架構,Eureka客戶端用來簡化與服務器之間的交互

@EnableEurekaServer 註冊Eureka服務器
註釋在啓動類上
Eureka是Netflix的一個開源架構,Eureka服務器用作服務註冊服務器

@Null 爲null
修飾任何類型

@NotNull 不能爲null
修飾任何類型
不能爲null 但可爲空,""," "

@NotEmpty 不能爲空
修飾集合類、字符串
不能爲空,長度必須大於0, " "
不能修飾基本類型,不然會報錯

javax.validation.UnexpectedTypeException: No validator could be found for

@NotBlank 必須有實際字符
修飾String
不能爲空,除了空字符,長度必須大於0,"aaa"

@AssertFalse 驗證是false
驗證布爾類型元素值是false

@AssertTrue 驗證是true
驗證布爾類型元素值是true

@Email 驗證元素是emai
驗證字符串的值應該是email
可通過正則表達式和flag自定義email格式

@CreditCardNumber 驗證元素是信用卡
通過Luhn 算法來驗證字符串是否是信用卡數字

@SafeHtml 是否是安全的HTML
檢查被註釋的是否包含潛在的惡意片段(比如<script>
whitelistType:白名單,additionalTags:額外的白名單
@SafeHtml(whitelistType=,additionalTags=)

@ScriptAssert
Checks whether the given script can successfully be evaluated against the annotated element.
@ScriptAssert(lang=,script=,alias=)

@URL 驗證是否是URL
驗證字符串是否是有效的URL
@URL(protocol=,host=, port=,regexp=, flags=)

@Pattern 驗證是否匹配
驗證字符串類型是否和正則表達式或者flag匹配
@Pattern(regex=正則表達式,flag=)

@Digits 驗證數位
驗證整數位數 和 小數位數上限
@Digits(integer=整數位數, fraction=小數位數)

驗證日期類型的元素的值 應該比當前時間晚

@Range 驗證元素長度
驗證字符串、集合、各種原生類型等
@Range(min=下限 max=上限)

@Size 驗證元素長度
驗證字符串、map、數組,任何字符串自類型等
@Size(min=下限 max=上限)

@Length 驗證元素長度
驗證字符串元素的長度
@Length(min=下限 max=上限)

@Max 驗證元素小於等於
驗證元素的值小於等於最大值value,對Hibernate 原生數據有影響
@Max(value=x)

@Min 驗證元素大於等於
驗證元素的值大於等於最小值value,對Hibernate 原生數據有影響
@Max(value=x)

@DecimalMax 驗證元素小於等於
驗證元素的值小於等於最大值value,可修飾string
@DecimalMax(value=x)

@DecimalMin 驗證元素大於等於
驗證元素的值大於等於最小值value,可修飾string
@DecimalMin(value=x)

@Past 驗證日期類型比當前時間早
驗證日期類型的元素的值 應該比當前時間早

@Future 驗證日期類型比當前時間晚
驗證日期類型的元素的值 應該比當前時間晚

@Valid 數據驗證
@Valid是使用hibernate validation的時候使用
可遞歸驗證

@Validated 數據驗證
@Valid是使用hibernate validation的時候使用

@ApiOperation API註解
@ApiOperation(value = “接口說明”, httpMethod = “接口請求方式”, response = “接口返回參數類型”, notes = “接口發佈說明”)

@ApiParam API參數註解
@ApiParam(required = “是否必須參數”, name = “參數名稱”, value = “參數具體描述”)


找不到的:
@WriteDS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章