java注解
一、標準注解
1、@Override 重寫函數(shù)
2、@Deprecated 不鼓勵使用(有更好的方式、使用有風險或已不再維護)
3、@SuppressWarnings 忽略某項Warning
二、元注解
1、@Target 表明注解鎖修飾的java元素類型,取值(ElementType)
2、@Retention 表示需要在什么級別保存該注釋信息,用于描述注解的生命周期(默認為CLASS),取值(RetentionPolicy)
RetentionPolicy.SOURCE: 注解的作用域限制在源碼.java文件級別,編譯器會直接忽略它.
RetentionPolicy.CLASS:注解的作用域限制在編譯期間.class文件級別,JVM運行時會直接忽略.
RetentionPolicy.RUNTIME: 作用域能夠延伸到JVM運行時
3、@Document(標記注解,沒有成員) 勇于描述其他類型的annotation應該被作為標注的程序成員的公共api,可以文檔化
4、Inherited(標記注解) 用該注解修飾的注解,會被子類繼承。如果一個用了@Inherited修飾的annotation類型被用于一個class,則這個annotation將被用于該class的子類
spring注解
1、@Service 用于標注業(yè)務層組件
2、@Controller 用于標注控制層組件,(如Struts中的action)
3、@Repository 用于標注數(shù)據(jù)訪問組件,即dao組件
4、@Component 泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注(不推薦使用)
5、@Autowired 可以對類成員變量、方法及構造函數(shù)進行標注,完成自動裝配的工作
6、@Resource 在容器里面找相應的資源,也可以通過name屬性指定它name的資源??梢宰⒔獾絝ield或者setter上面(默認按名稱裝配,當找不到匹配的bean才會按類型裝配)
@Resource和@Autowired的區(qū)別:
1、@Autowired默認按照byType的方式進行bean匹配,@Resource默認按照byName的方式進行備案匹配
2、@Autowired是spring的注解,@resource是J2EE的注解
7、@PostConstruct 標注了@PostConstruct注釋的方法將在類實例化后調用
8、@PreDestroy 標注了@PreDestroy注釋的方法將在類銷毀之前調用
9、@Qualifier 指定注入Bean的名稱(只能和@Autowired結合使用),此時與@Resource指定name屬性作用相同
10、@Scope 可以指定Bean實例的作用域
@Scope中可以指定如下值:
singleton:定義bean的范圍為每個spring容器一個實例(默認值)
prototype:定義bean可以被多次實例化(使用一次就創(chuàng)建一次)
request:定義bean的范圍是http請求(springMVC中有效)
session:定義bean的范圍是http會話(springMVC中有效)
global-session:定義bean的范圍是全局http會話(portlet中有效)
11、@RequestMapping 是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑
12、@RequestParam 參數(shù)綁定說明
13、@ModelAndView 作用域:request 聲明在屬性上,表示該屬性的value來源于model里“queryBean”,并被保存到model里 聲明在方法上,表示該方法的返回值被保存到model里
14、@Cacheable 聲明一個方法的返回值應該被緩存,例如@Cacheable(modelld=“testCaching”)
15、@CacheFlush 聲明一個方法是清空緩存的觸發(fā)器,例如 @CacheFlush(modelld=“testCaching”)
16、@SessionAttributes Spring 允許我們有選擇地指定 ModelMap 中的哪些屬性需要轉存到 session 中,以便下一個請求屬對應的 ModelMap 的屬性列表中還能訪問到這些屬性。(只能聲明在類上,而不能聲明在方法上)
例如:@SessionAttributes("currUser") // 將ModelMap 中屬性名為currUser 的屬性
17、@InitBinde 如果希望某個屬性編輯器僅作用于特定的Controller,可以在Controller中定義一個標注@InitBinder注解的方法
18、@Required 負責檢查一個bean在初始化時其聲明的 set方法是否被執(zhí)行, 當某個被標注了 @Required 的 Setter 方法沒有被調用,則 Spring 在解析的時候會拋出異常,以提醒開發(fā)者對相應屬性進行設置。 @Required 注解只能標注在 Setter 方法之上。
springmvc注解
1、@Controller 負責注冊一個bean到spring上下文中,bean的ID默認為類名稱開頭字母小寫,你也可以自己指定,如下:
//方法一:
@Controller
public class TestController {}
//方法二:
@Controller("tmpController")
public class TestController {}
2、@RequestMapping用來定義訪問的URL,你可以為整個類定義一個@RequestMapping,或者為每個方法指定一個。
把@RequestMapping放在類級別上,這可令它與方法級別上的@RequestMapping注解協(xié)同工作,取得縮小選擇范圍的效果,如:
@RequestMapping("/test")
public class TestController {}
該類下的所有訪問路徑都在/test之下
http://m.itdecent.cn/p/cbffeff5f6c7 鏈接
3、(1)@PathVariable用于方法中的參數(shù),表示方法參數(shù)綁定到地址URL的模板變量
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner( , Model model) {
Owner owner = ownerService.findOwner(ownerId);
model.addAttribute("owner", owner);
return "displayOwner";
}
(2)@PathVariable用于地址欄使用{xxx}模版變量時使用。如果@RequestMapping沒有定義類似"/{ownerId}" ,這種變量,則使用在方法中@PathVariable會報錯
4、@ModelAttribute
(1)應用于方法參數(shù),參數(shù)可以在頁面直接獲取,相當于request.setAttribute(,)
(2)應用于方法,將任何一個擁有返回值的方法標注上@ModelAttribute,使其返回值將會進入到模型對象的屬性列表中.
(3)應用于方法參數(shù)時@ModelAttribute("xx"),須關聯(lián)到Object的數(shù)據(jù)類型,基本數(shù)據(jù)類型 如:int,String不起作用
@ModelAttribute("items")//<——①向模型對象中添加一個名為items的屬性
public List<String> populateItems() {
List<String> lists = new ArrayList<String>();
lists.add("item1");
lists.add("item2");
return lists;
}
@RequestMapping(params = "method=listAllBoard")
public String listAllBoard(@ModelAttribute("currUser")User user, ModelMap model) {
bbtForumService.getAllBoard();
//<——②在此訪問模型中的items屬性
System.out.println("model.items:" + ((List<String>)model.get("items")).size());
return "listBoard";
}
5、@ResponseBody 這個注解可以直接放在方法上,表示返回類型將會直接作為HTTP響應字節(jié)流輸出(不被放置在Model,也不被攔截為視圖頁面名稱)??梢杂糜赼jax
6、@RequestParam @RequestParam是一個可選參數(shù),例如:@RequestParam("id")注解,所以它將和URL所帶參數(shù) id進行綁定如果入?yún)⑹腔緮?shù)據(jù)類型(如int、long、float等),URL請求參數(shù)中一定要有對應的參數(shù),否則將拋出org.springframework.web.util.NestedServletException 異常,提示無法將 null 轉換為基本數(shù)據(jù)類型
@RequestParam包含3個配置 @RequestParam(required = ,value="", defaultValue="")
required :參數(shù)是否必須,boolean類型,可選項,默認為true
value: 傳遞的參數(shù)名稱,String類型,可選項,如果有值,對應到設置方法的參數(shù)
defaultValue:String類型,參數(shù)沒有傳遞時為參數(shù)默認指定的值
7、@SessionAttributes Spring 允許我們有選擇地指定ModelMap中的哪些屬性需要轉存到session中,以便下一個請求屬對應的ModelMap的屬性列表中還能訪問到這些屬性。這一功能是通過類定義處標注 @SessionAttributes 注解來實現(xiàn)的。@SessionAttributes 只能聲明在類上,而不能聲明在方法上,例如:
@SessionAttributes("currUser") // 將ModelMap 中屬性名為currUser 的屬性
@SessionAttributes({"attr1","attr2"})
@SessionAttributes(types = User.class)
@SessionAttributes(types = {User.class,Dept.class})
@SessionAttributes(types = {User.class,Dept.class},value={"attr1","attr2"})
@CookieValue 獲取cookie信息
@RequestHeader 獲取請求的頭部信息
@ControllerAdvice 全局異常處理器 和@ExceptionHandler配合使用
mybatis注解
1、@CacheNamespace 為給定的命名空間(比如類)配置緩存
2、@CacheNamespaceRef 參照另一個命名空間來使用
3、@ConstructorArgs 收集一組結果傳遞給對象構造方法
4、@Arg 單獨的構造方法參數(shù),是ConstructorArgs 集合的一部分
5、@TypeDiscriminator 一組實例值被用來決定結果映射的表現(xiàn)
6、@Case 單獨實例的值和它的映射
7、@Results 結果映射的列表,包含了一個特別結果列如何被映射到屬性或字段的詳情
8、@Result 在列和屬性或字段之間的單獨結果映射。
9、@One 復雜類型的單獨屬性值映射
10、@Many 復雜類型的集合屬性映射
11、@Options 這個注解提供訪問交換和配置選項的寬廣范圍,它們通常在映射語句上作為屬性出現(xiàn)
12、@Insert、@Update、@Delect 這些注解中的每一個代表了執(zhí)行的真實 SQL
13、@InsertProvider、@UpdateProvider、@SelectProvider、@DeleteProvider 這些可選的SQL注解允許你指定一個類名和一個方法在執(zhí)行時來返回運行的SQL
14、@Param 當映射器方法需多個參數(shù),這個注解可以被應用于映射器方法參數(shù)來給每個參數(shù)一個名字。否則,多參數(shù)將會以它們的順序位置來被命名。
Hibernate注解
類級別注解
1、@Entity(name="tableName") 必須,注解將一個類聲明為一個實體bean
2、@Table(name="",catalog="",schema="") 可選,通常和@Entity 配合使用,只能標注在實 體的 class 定義處,表示實體對應的數(shù)據(jù)庫表的信息
屬性級別注解
與主鍵相關注解
3、@Id 必須,定義了映射到數(shù)據(jù)庫表的主鍵的屬性,一個實體只能有一個屬性被映射為主 鍵,置于 getXxxx() 前
4、@GeneratedValue(strategy=GenerationType,generator="") 可選,用于定義主鍵生成策略
5、@SequenceGenerator 注解聲明了一個數(shù)據(jù)庫序列
與非主鍵相關注解
6、@Version 可以在實體bean中使用@Version注解,通過這種方式可添加對樂觀鎖定的支持
7、@Basic 用于聲明屬性的存取策略:
@Basic(fetch=FetchType.EAGER) 即時獲?。J的存取策略)
@Basic(fetch=FetchType.LAZY) 延遲獲取
8、@Temporal - 用于定義映射到數(shù)據(jù)庫的時間精度:
@Temporal(TemporalType=DATE) 日期
@Temporal(TemporalType=TIME) 時間
@Temporal(TemporalType=TIMESTAMP) 兩者兼具
9、@Column 可將屬性映射到列,使用該注解來覆蓋默認值,@Column描述了數(shù)據(jù)庫表中該字段的詳細定義,這對于根據(jù) JPA 注解生成數(shù)據(jù)庫表結構的工具非常有作用
10、@Transient 可選,表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性,如果一個屬性并非數(shù)據(jù)庫表的字段映射,就務必將其標示為@Transient,否則ORM 框架默認其注解為 @Basic
無注解屬性默認值
如果屬性為單一類型,則映射為@Basic,
否則,如果屬性對應的類型定義了@Embeddable注解,則映射為@Embedded,
否則,如果屬性對應的類型實現(xiàn)了Serializable, 則屬性被映射為@Basic并在一個列中保存該對象的serialized版本,
否則,如果該屬性的類型為java.sql.Clob或 java.sql.Blob,則作為@Lob并映射到適當?shù)腖obType
映射繼承關系
11、@Inheritance 定義所選擇的策略. 這個注解需要在每個類層次結構(class hierarchy) 最頂端的實體類上使用
映射實體Bean的關聯(lián)關系
12、@JoinColumn 可選,用于描述一個關聯(lián)的字段
13、@OneToOne 表示一個一對一的映射
14、@ManyToOne 表示一個多對一的映射,該注解標注的屬性通常是數(shù)據(jù)庫表的外鍵
15、@OneToMany 描述一個一對多的關聯(lián),該屬性應該為集合類型,在數(shù)據(jù)庫中并沒有實際字段
16、@ManyToMany 可選,描述一個多對多的關聯(lián)