Java中的注解---@注解


 

什么是注解

语法:@注解名称
注解的作用:替代xml配置文件!
servlet3.0中,就可以不再使用web.xml文件,而是所有配置都使用注解!
注解是由框架来读取使用的!
 

注解的使用

  • 定义注解类:框架的工作
  • 使用注解:我们的工作
  • 读取注解(反射):框架的工作
     

定义注解类

 @interface MyAnnotation{} 
 
 所有的注解都是Annotation的子类!

 

使用注解

注解的作用目标:
* 类
* 方法
* 构造器
* 参数
* 局部变量
* 包
 

注解的属性

定义属性:

格式:
@interface MyAnno1 {
int age();
String name();
}

使用注解时给属性赋值

@MyAnno1(age=100, name="zhangSan")

注解属性的默认值:在定义注解时,可以给注解指定默认值!

 int age() default 100;
在使用注解时,可以不给带有默认值的属性赋值!

名为value的属性的特权
当使用注解时,如果只给名为value的属性赋值时,可以省略“value=”
例如:

 @MyAnno1(value="hello"),可以书写成 @MyAnno1("hello")

注解属性的类型
– 8种基本类型
– String
– Enum
– Class
– 注解类型
– 以上类型的一维数组类型

当给数组类型的属性赋值时,若数组元素的个数为1时,可以省略大括号

使用注解
@MyAnno1(
	a=100,
	b="hello",
	c=MyEnum1.A,
	d=String.class,
	e=@MyAnno2(aa=200, bb="world"),
	f=100
)
public class Demo3 {}

定义注解
@interface MyAnno1 {
	int a();
	String b();
	MyEnum1 c();
	Class d();
	MyAnno2 e();
	int[] f();
}

 

注解的作用目标限定以及保存策略

 

作用目标限定 @Target

让一个注解,它的作用目标只能在类上,不能在方法上,这就叫作用目标的限定!

  • 在定义注解时,给注解添加注解,这个注解是@Target
@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@interface MyAnno1 {
	
}

 

保留策略 @Retention

  • 源代码文件(SOURCE):注解只在源代码中存在,当编译时就被忽略了
  • 字节码文件(CLASS):注解在源代码中存在,然后编译时会把注解信息放到了class文件,但JVM在加载类时,会忽略注解!
  • JVM中(RUNTIME):注解在源代码、字节码文件中存在,并且在JVM加载类时,会把注解加载到JVM内存中(它是唯一可反射注解!)

限定注解的保留策略

@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno1 {
	
}

 

读取注解(反射)

  • 前提:注解的保留策略必须是RUNTIME

反射注解需要从作用目标上返回

  • 类上的注解,需要使用Class来获取
  • 方法上的注解,需要Method来获取
  • 构造器上的注解,需要Constructor来获取
  • 成员上的,需要使用Field来获取

Class 以及
Method、Constructor、Field的共同父类 AccessibleObject

它们都有一个方法:

  • Annotation getAnnotation(Class),返回目标上指定类型的注解!
  • Annotation[] getAnnotations(),返回目标上所有注解!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值