注解Annotation介绍及自定义注解的使用

注解

注解概述

  • 注解主要起到标识作用,是JDK5.0提出的,Java增加对元数据的支持,也就是Annotation(注解)。
  • 引用Annotation的概念来描述元数据

什么是元数据

  • 元数据是用来描述数据的数据,通俗一点来说,就是描述代码间的关系,或者代码与
    其他资源(数据库)之间内在联系的数据。
  • 举例:struts来说,元数据指的就是struts-config.xml;对hibernate来说就是hbm文件;
  • 如何创建元数据?
    • JDK5.0出来后,Java语言提出了四种类型:类(class)、枚举(enum)、接口(interface)和注解(@interface),它们处在用一个级别。Java就是通过注解来表示元数据的。

常用三个基本注解

  • @Override:限定重写父类的方法,该注解只能用于方法
  • @Deprecated:用于表示某个程序中元素(类、方法等)已过时
  • @SupperessWarnings:抑制编译器警告
  • @SuppressWarnings(“抑制的警告的具体类型”):
    • @unused:变量未使用
    • @deprecation:使用了不赞成使用的类或方法时的警告
    • @unchecked:执行了未检查的转换时的警告。比如没有使用泛型
    • @falthrough:当switch程序块直接通往下一种情况而没有break时的警告
    • @path:在类路径、源文件路径等中有不存在的路径时的警告。
    • @serial:当在可序列化雷尚缺少serialVersionUID定义时的警告
    • @finally:任何finally子句不能正常完成时的警告。
    • @all:关于以上所有情况的警告。
public class IPLMThread implements Runnable{
	// 注解Override
	@Override
	public void run() {
		System.out.println("Hello");
	}
	
	// 使用注解的好处
	// 假如目的是重写run方法,如果不加注解Override,下面是正确的,编译器将他视为一个新方法
	// 加了注解 编译器会报错
	//@Override
	public void run(String name) {
		System.out.println("Hello");
	}
}

注解分类

(1)按照运行机制划分:
  源码注解:只在源码中存在,编译成.class文件就不存在了。
  
  编译时注解:在源码和.class文件中都存在,像@Override、@Deprecated,他们都属于编译时注解。
  
  运行时注解:在运行阶段才起作用,甚至会影响运行逻辑的注解。象@Autowired自动注入属于运行时
  注解,会在运行阶段将你的成员变量自动的注入进来。
  
(2)按照来源划分
  来自JDK的注解
  来自第三方的注解
  自定义的注解
  
(3)元注解
  元注解就是给注解进行注解,可以理解位注解的注解就是元注解。
  @Retention:说明该注解的生命周期
   RententionPolicy.CLASS:指注解只保留一个class文件中
   RententionPolicy.SOURCE:指定注解只保留在一个源文件中
   RententionPolicy.RUNTIME:指定注解可以保留在程序运行期间
  @Documented:文档注解
  @Inherited:被他修饰的注解将具有继承性,如果某个类使用被该注解修饰的注解,则它的子类将自动具有该注解。
  @Target: 作用域
   ElementType.TYPE:说明该注解只能被声明在一个类前。
   ElementType.FIELD:说明该注解只能被声明在一个类的字段前。 
   ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
   ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
   ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。 
   ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
   ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
   ElementType.PACKAGE:说明该注解只能声明在一个包名前。

自定义注解

  语法格式   @interface
  
  1.成员类型受限,合法类型  基本数据类型,String,Class Annotation,等
  
   2.如何注解只有一个成员,则成员名必须为value(),在使用时候可以忽略成员名和赋值号(=)
   
   3.注解类可以没有成员,没有成员注解称为标识注解
   
    注解按照是否有值可以分为三类,分别是  标记注解  、  单值注解  、  完全注解  。
  
// 注解可以使用在类或类方法前	运行期间 有一个参数
@Target(value={ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
	String value();
}
@Target(value={ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Field {
	String columnName();
	String type();
	int length();
}
@Table("tb_student")
public class Student {
	//可以通过注解记录值
	@Field(columnName="id",type="int",length=10)
	private int id;
	@Field(columnName="sname",type="varchar",length=10)
	private String studentName;
	@Field(columnName="age",type="int",length=3)
	private int age;
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值