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 可选,描述一个多对多的关联