java注解学习笔记

今天看了下有关java注解的视频学习资料在,做点笔记:

学java注解的目的:

能看别人代码,特别是框架代码,因为肯定与注解有关。

编程更简洁,代码清晰。


java注解是java1.5引入的:注解概念是java提供的一种原程序中的元素关联任何信息和元数据的途径和方法。


常见注解(编译时注解);

@override:方法覆盖了它的父类的方法

@Deprecated:这个注释是一个标记注释。所谓标记注释,就是在源程序中加入这个标记后,并不影响程序的编译,但有时编译器会显示一些警告信息。或者在方法名上加一横线,意思是建议不使用

@SuppressWarnings(""):对代码中变量或方法的警告提示,也是想告诉该方法存在潜在风险等。

注解分类:

按照运行机制分类:

1,源码注解:注解只在源码中存在 ,编译成.class文件就不存在了。

2,编译时注解:在源码和.class中都存在

3,运行时注解:在运行阶段才会起作用的注解,甚至会影响运行逻辑的注解。

按照来源分类:

1,来自JDK的注解:

2,来自第三方的注解:

3,我们自己定义的注解:

另外一类叫元注解:对注解的注解。

常见第三方注解:

Spring中的@Autowired   @Service    @Repository等

Mybatis中的@InsertProvider   @UpdateProvider   @Options等

自定义注解:

以@interface +注解名

如定论了一个名为Description注解:

@Target({ ElementType.METHOD, ElementType.TYPE })   //@Targe指注解的作用域,包括METHOD方法声明,TYPE类接口,PARAMETER参数声明,PACKAGE包声明,LOCAL_VARIABLE局部变量声明,FIELD字段声明及CONSTRUCTOR构造方法声明
@Retention(RetentionPolicy.RUNTIME)   //@Retenion指生命周期:1,源码注解:注解只在源码中存在 ,编译成.class文件就不存在了。2,编译时注解:在源码和.class中都存在3,运行时注解:在运行阶段才会起作用的注解,甚至会影响运行逻辑的注解。
@Inherited //@Inherited指允许子类继承
@Documented//@Documented生成java doc时包含注解信息
//以上4行为元注解
public @interface Description {

/*注解中的成员类型是受限制的:合法的类(int double等)包括原始类型及String,Class,Annotation,Enumeration等
* 如果注解只有一个成员,则成员名必须取名为value(),在使用注解时可以忽略成员名和赋值符号(=)
* 注解类可以没有成员,没有成员的注解称为标识注解****/
String desc();//注解中的成员(成员变量)以无参无异常方式声明
String author();
int age() default 18;//可以用default为成员指定一个默认值
}
下面是一个对注解进行操作的小例子:

@Description(author = "child", desc = "在Child上的类注解")    //使用注解:使用注解语法 :@<注解名>(成员名1=值1,成员名2=值2.....)多个成员用逗号分隔,根据@Target指定的使用范围来使用
public class Child{


@Description(author = "ldm", desc = "在Child的name()方法注解")
public String name() {
// TODO Auto-generated method stub
return null;
}
@Description(author = "child", desc = "Child中number()方法注解")
public String number() {
return "100";
}
}

public static void main(String[] args) {
// 首先使用类加载器加载类
try {
Class c = Class.forName("com.ldm.test.Child");
// 找到类上面的注解
boolean isExist = c.isAnnotationPresent(Description.class);// 判断注解是否存在
if (isExist) {
// 拿到注解实例
Description d = (Description) c.getAnnotation(Description.class);
System.out.println(d.desc());
}
//找到方法上的注解
Method[] ms=c.getMethods();
for (Method m : ms) {
boolean isMExist = m.isAnnotationPresent(Description.class);// 判断注解是否存在
if(isMExist){
// 拿到注解实例
Description d = (Description) m.getAnnotation(Description.class);
System.out.println(d.desc());
}
}
/**********************************************/
//另外一种解析方法
for (Method m : ms) {
Annotation []as=m.getAnnotations();
for (Annotation a : as) {
if(a instanceof Description){
Description d=(Description) a;
System.out.println(d.desc());
}
}
}
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}

----------------控制台打印结果------------------------------------------

在Child上的类注解
在Child的name()方法注解
Child中number()方法注解
在Child的name()方法注解
Child中number()方法注解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值