Java基础之《注解》

一、Java中有三个内置的注解

1、@Override
表示当前的方法定义将覆盖超类中的方法,如果出现错误,编译器就会报错。

2、@Deprecated
如果使用此注解,编译器会出现警告信息。一般表示方法即将废弃。

3、@SuppressWarnings
忽略编译器的警告信息。

是不是这几个经常用到的。

二、Java5.0定义的4个元注解

元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。这些类型和它们所支持的类在java.lang.annotation包中可以找到。

1、@Target
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明

2、@Retention
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。

SOURCE:在源文件中有效(即源文件保留),仅出现在源代码中,而被编译器丢弃
CLASS:在class文件中有效(即class保留),被编译在class文件中,运行时丢弃
RUNTIME:在运行时有效(即运行时保留),编译在class文件中

3、@Documented
@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
是一个生成文档的辅助工具。

4、@Inherited
使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类,@Inherited annotation类型是被标注过的class的子类所继承。
例如父类在类名上声明了@Transactional,子类继承父类,父类的声明的@Transactional会对子类的所有方法进行事务增强。

例子一,Spring的Component注解:
@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) //注解保存在JVM运行时刻,能够在运行时刻通过反射API来获取到注解的信息
@Documented
public @interface Component
{
  String value() default "";
}

例子二,Spring的Transactional注解:

@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited //注解可以被继承
@Documented
public @interface Transactional
{
  String value() default "";
  
  Propagation propagation() default Propagation.REQUIRED;
  
  Isolation isolation() default Isolation.DEFAULT;
  
  int timeout() default -1;
  
  boolean readOnly() default false;
  
  Class<? extends Throwable>[] rollbackFor() default {};
  
  String[] rollbackForClassName() default {};
  
  Class<? extends Throwable>[] noRollbackFor() default {};
  
  String[] noRollbackForClassName() default {};
}

三、自定义注解

1、格式
public @interface 注解名{
  定义体
}
2、注解参数的可支持数据类型
1)所有基本数据类型(int,float,boolean,byte,double,char,long,short)
2)String类型
3)Class类型
4)enum类型
5)Annotation类型
6)以上所有类型的数组

3、注解参数的规则
1)修饰符只能是public 或默认(default)
2)参数成员只能用基本类型byte,short,int,long,float,double,boolean八种基本类型和String,Enum,Class,annotations及这些类型的数组
3)如果只有一个参数成员,最好将名称设为"value"
4)注解元素必须有确定的值,可以在注解中定义默认值,也可以使用注解时指定,非基本类型的值不可为null,常使用空字符串或0作默认值
5)在表现一个元素存在或缺失的状态时,定义一下特殊值来表示,如空字符串或负值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值