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