注解汇总

java注解

一、标准注解

1、@Override 重写函数
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 用于标注业务层组件

2、@Controller 用于标注控制层组件,(如Struts中的action)

3、@Repository 用于标注数据访问组件,即dao组件

4、@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注(不推荐使用)

5、@Autowired 可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作

6、@Resource 在容器里面找相应的资源,也可以通过name属性指定它name的资源。可以注解到field或者setter上面(默认按名称装配,当找不到匹配的bean才会按类型装配)

@Resource和@Autowired的区别:

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可以被多次实例化(使用一次就创建一次)
request:定义bean的范围是http请求(springMVC中有效)
session:定义bean的范围是http会话(springMVC中有效)
global-session:定义bean的范围是全局http会话(portlet中有效)

11、@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

12、@RequestParam 参数绑定说明

13、@ModelAndView 作用域:request 声明在属性上,表示该属性的value来源于model里“queryBean”,并被保存到model里 声明在方法上,表示该方法的返回值被保存到model里

14、@Cacheable 声明一个方法的返回值应该被缓存,例如@Cacheable(modelld=“testCaching”)

15、@CacheFlush 声明一个方法是清空缓存的触发器,例如 @CacheFlush(modelld=“testCaching”)

16、@SessionAttributes Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。(只能声明在类上,而不能声明在方法上)
例如:@SessionAttributes("currUser") // 将ModelMap 中属性名为currUser 的属性

17、@InitBinde 如果希望某个属性编辑器仅作用于特定的Controller,可以在Controller中定义一个标注@InitBinder注解的方法

18、@Required 负责检查一个bean在初始化时其声明的 set方法是否被执行, 当某个被标注了 @Required 的 Setter 方法没有被调用,则 Spring 在解析的时候会抛出异常,以提醒开发者对相应属性进行设置。 @Required 注解只能标注在 Setter 方法之上。

springmvc注解

1、@Controller 负责注册一个bean到spring上下文中,bean的ID默认为类名称开头字母小写,你也可以自己指定,如下:

//方法一: 
@Controller 
public class TestController {} 

//方法二:            
@Controller("tmpController") 
public class TestController {} 

2、@RequestMapping用来定义访问的URL,你可以为整个类定义一个@RequestMapping,或者为每个方法指定一个。
把@RequestMapping放在类级别上,这可令它与方法级别上的@RequestMapping注解协同工作,取得缩小选择范围的效果,如:

@RequestMapping("/test") 
public class TestController {} 

该类下的所有访问路径都在/test之下

http://www.jianshu.com/p/cbffeff5f6c7 链接

3、(1)@PathVariable用于方法中的参数,表示方法参数绑定到地址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)应用于方法参数,参数可以在页面直接获取,相当于request.setAttribute(,)
(2)应用于方法,将任何一个拥有返回值的方法标注上@ModelAttribute,使其返回值将会进入到模型对象的属性列表中.
(3)应用于方法参数时@ModelAttribute("xx"),须关联到Object的数据类型,基本数据类型 如: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响应字节流输出(不被放置在Model,也不被拦截为视图页面名称)。可以用于ajax

6、@RequestParam @RequestParam是一个可选参数,例如:@RequestParam("id")注解,所以它将和URL所带参数 id进行绑定如果入参是基本数据类型(如int、long、float等),URL请求参数中一定要有对应的参数,否则将抛出org.springframework.web.util.NestedServletException 异常,提示无法将 null 转换为基本数据类型

@RequestParam包含3个配置 @RequestParam(required = ,value="", defaultValue="")
required :参数是否必须,boolean类型,可选项,默认为true
value: 传递的参数名称,String类型,可选项,如果有值,对应到设置方法的参数
defaultValue:String类型,参数没有传递时为参数默认指定的值

7、@SessionAttributes Spring 允许我们有选择地指定ModelMap中的哪些属性需要转存到session中,以便下一个请求属对应的ModelMap的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现的。@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 单独的构造方法参数,是ConstructorArgs 集合的一部分

5、@TypeDiscriminator 一组实例值被用来决定结果映射的表现

6、@Case 单独实例的值和它的映射

7、@Results 结果映射的列表,包含了一个特别结果列如何被映射到属性或字段的详情

8、@Result 在列和属性或字段之间的单独结果映射。

9、@One 复杂类型的单独属性值映射

10、@Many 复杂类型的集合属性映射

11、@Options 这个注解提供访问交换和配置选项的宽广范围,它们通常在映射语句上作为属性出现

12、@Insert、@Update、@Delect 这些注解中的每一个代表了执行的真实 SQL

13、@InsertProvider、@UpdateProvider、@SelectProvider、@DeleteProvider 这些可选的SQL注解允许你指定一个类名和一个方法在执行时来返回运行的SQL

14、@Param 当映射器方法需多个参数,这个注解可以被应用于映射器方法参数来给每个参数一个名字。否则,多参数将会以它们的顺序位置来被命名。

Hibernate注解

类级别注解

1、@Entity(name="tableName") 必须,注解将一个类声明为一个实体bean

2、@Table(name="",catalog="",schema="") 可选,通常和@Entity 配合使用,只能标注在实 体的 class 定义处,表示实体对应的数据库表的信息

属性级别注解

与主键相关注解

3、@Id 必须,定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主 键,置于 getXxxx() 前

4、@GeneratedValue(strategy=GenerationType,generator="") 可选,用于定义主键生成策略

5、@SequenceGenerator 注解声明了一个数据库序列

与非主键相关注解

6、@Version 可以在实体bean中使用@Version注解,通过这种方式可添加对乐观锁定的支持

7、@Basic 用于声明属性的存取策略:

@Basic(fetch=FetchType.EAGER)   即时获取(默认的存取策略)
@Basic(fetch=FetchType.LAZY)    延迟获取

8、@Temporal - 用于定义映射到数据库的时间精度:

@Temporal(TemporalType=DATE)       日期
@Temporal(TemporalType=TIME)       时间
@Temporal(TemporalType=TIMESTAMP) 两者兼具

9、@Column 可将属性映射到列,使用该注解来覆盖默认值,@Column描述了数据库表中该字段的详细定义,这对于根据 JPA 注解生成数据库表结构的工具非常有作用

10、@Transient 可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM 框架默认其注解为 @Basic

无注解属性默认值

如果属性为单一类型,则映射为@Basic,
否则,如果属性对应的类型定义了@Embeddable注解,则映射为@Embedded,
否则,如果属性对应的类型实现了Serializable, 则属性被映射为@Basic并在一个列中保存该对象的serialized版本,
否则,如果该属性的类型为java.sql.Clob或 java.sql.Blob,则作为@Lob并映射到适当的LobType

映射继承关系

11、@Inheritance 定义所选择的策略. 这个注解需要在每个类层次结构(class hierarchy) 最顶端的实体类上使用

映射实体Bean的关联关系

12、@JoinColumn 可选,用于描述一个关联的字段

13、@OneToOne 表示一个一对一的映射

14、@ManyToOne 表示一个多对一的映射,该注解标注的属性通常是数据库表的外键

15、@OneToMany 描述一个一对多的关联,该属性应该为集合类型,在数据库中并没有实际字段

16、@ManyToMany 可选,描述一个多对多的关联

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,773评论 6 342
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,459评论 0 4
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,168评论 9 118
  • 粤东的冬天很温暖,会给人一种2018年夏天已经来了的错觉。今年夏天,我们都毕业了,唯一不同的是,我们没有如约而至...
    森伊阅读 499评论 0 6