c JAVA 注解_Java注解详解 - cjavaer的个人空间 - OSCHINA - 中文开源技术交流社区

今天在做一个工具,我把注解放在属性上,通过反射怎么也取不到。

1、可能是定义的注解的@Target没有配置作用在属性上。

2、还有可能是你定义的属性是private的,但是你用的Class.getFields(),这个方法不能获取private的属性,应该采用Class.getDeclaredFields()。

参考:http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html

上面的这篇文章就是深入讲解的注解。

一、注解介绍

在JDK5.0引入了“注解”的概念。那为什么要引入注解呢?它有什么好处呢?

举个例子:

f24f196e5095623ec37ae76789042d5f.png

这个注解就是代表下面的方法是重写父类的方法,(注意:把@Override注解去掉,也是好使的,那为什么还要加上呢?),加上的话,一旦我们把这个方法写错了的话(void toString()…)等,会报错的,也就是去掉的,一旦写错的话,会出现两种结果。

下面讲解“元注解”,因为我们后面讲到的自定义注解在在这些元注解之上,也就是我们的自定义注解上应该配置这些注解。

二、元注解

1) @Retention (代表该注解的生命周期)

在包java.lang.annotation中,有java的元注解,还有一些注解的接口。

@Retention的源码:

74d1a6a7467101d4145583f147aa3b23.png

从上面的源码可以看出:

(a)     注解可以相互修饰。

(b)     在@Retention中只有一个字段(属性)。类型为RetentionPolicy(枚举),属性名为value,括号就是注解中的一种语法格式。

a887fbf0bca4c2e011f484f85734c2d4.png

2) @Target (代表该注解作用的范围)

@Target的源码:

b5147ce784f3015b05b6a048961c7b02.png

从上图可以看出:

@Target成员属性的类型是ElementType(枚举)数组,属性名为value。

ElementType枚举类型的源码:

5c0674677a5d4fa43998efcaeb47fe02.png

3)@Document (代表使用javadoc工具打包文档的时候会把注解打包进去)

@Documented源码如下:

b78eb90af41fc295f1ec75abcf905186.png

4) @Inherited (代表加上这个注解的类会继承它的父类的注解)

@Inheriter源码如下:

c5ab2b3d5b63f34ecd9d3b4ae3040d20.png

三、自定义注解

第一步:定义注解

1、普通注解

5e1a4695c272e6b5cdc53d82a1f60aec.png

注意:可以在属性在后面加上 : String name() default "jack";

2、抽象属性

注意:定义的注解中的属性可以抽象的,这样的话,配置这个注解必须要配置下面的属性。

aed7727b9e443cd8186710e3abce3ff7.png

3、注意

1、上面定义的注解上配置了Retention,加上了运行时可以用,也就是支持反射。

2、配置Target,看配置可以支持类、属性、构造、方法,也就是这个demo的注解配置配置在这些方面,加上上面的Retention配置,也就是这这些地方可以支持反射。

3、另外还有一点是注解特有的,注解可以支持传递,也就是@demo注解配置了上面的属性,假设现在定义一个注解@haha,在@haha上配置了@demo注解,也就是@haha上相当于配置了Retention与Target上面的属性。

例如:

@demo

public @interface haha{

}

第二部:在某个类(或其它地方)使用自定义注解:

9d445931944167d29dbe51fd116c4810.png

注解在别处的代码:

a0a305b38daeb0f4f20ad2c07a8cf709.png

第三步:通过反射获取注解

655365c06007262b49cab57607866e45.png

注解方式的开发其实现在在好多系统中都使用到了,它方便开发框架或者一种插件式的系统。一般要结合反射知识使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值