Java在1.5开始引入了注解,目前流行的框架都在用注解,可想而知注解的强大之处。

以下通过自定义注解来深入了解java注解。
一、创建自定义注解
package com.sam.annotation;
import java.lang.annotation.*;
/**
* @author sam
* @since 2017/7/13
*/
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface MyMessage {
String name() default "sam";
int num() default 0;
String desc();
}
说明:
@Target、@Retention、@Inherited、@Documented为元注解(meta-annotation),它们是负责注解其他注解的。
1、Target:指明注解支持的使用范围,取值可以参考枚举ElementType,以下:
ElementType.TYPE //类、接口、枚举
ElementType.FIELD //属性
ElementType.METHOD //方法
ElementType.PARAMETER //参数
ElementType.CONSTRUCTOR //构造器
ElementType.LOCAL_VARIABLE //局部变量
ElementType.ANNOTATION_TYPE //注解
ElementType.PACKAGE //包
2、Retention:指明注解保留的的时间长短,取值参考枚举RetentionPolicy,一下:
SOURCE //源文件中保留
CLASS //class编译时保留
RUNTIME //运行时保留
3、Inherited:指明该注解类型被自动继承。如果一个annotation注解被@Inherited修饰,那么该注解作用于的类 的子类也会使用该annotation注解。
4、Documented:指明拥有这个注解的元素可以被javadoc此类的工具文档化。
二、创建测试类,使用自定义注解
package com.sam.annotation;
/**
* @author sam
* @since 2017/7/13
*/
public class AnnotationTest {
@MyMessage(num = 10, desc = "参数a")
private static int a;
@MyMessage(name = "Sam test", desc = "测试方法test")
public void test() {
System.out.println("test");
}
}
在该类中的属性和方法,使用了自定义的注解,并指明了参数。
那么现在就需要解析自定义的注解。
三、解析注解
使用反射机制处理自定义注解
package com.sam.annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 使用反射处理注解
*
* @author sam
* @since 2017/7/13
*/
public class MyMessageProcessor {
public static void main(String[] args) {
try {
//加载annotationTest.class类
Class clazz = MyMessageProcessor.class.getClassLoader().loadClass("com.sam.annotation.AnnotationTest");
//获取属性
Field[] fields = clazz.getDeclaredFields();
//遍历属性
for (Field field : fields) {
MyMessage myMessage = field.getAnnotation(MyMessage.class);
System.out.println("name:" + myMessage.name() + " num:" + myMessage.num() + " desc:" + myMessage.desc());
}
//获取类中的方法
Method[] methods = clazz.getMethods();
//遍历方法
for (Method method : methods) {
//判断方法是否带有MyMessage注解
if (method.isAnnotationPresent(MyMessage.class)) {
// 获取所有注解 method.getDeclaredAnnotations();
// 获取MyMessage注解
MyMessage myMessage = method.getAnnotation(MyMessage.class);
System.out.println("name:" + myMessage.name() + " num:" + myMessage.num() + " desc:" + myMessage.desc());
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
运行MyMessageProcessor 得到结果:
name:sam num:10 desc:参数a name:Sam test num:0 desc:测试方法test Process finished with exit code 0
具体定制注解所实现的内容,可以在MyMessageProcessor.java中进行修改。
自此,已经对java的自定义注解有简单的了解。
以上这篇简单谈谈java自定义注解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# java自定义注解
# Java注解简单使用实例解析
# Java注解处理器简单实例
# Java利用自定义注解、反射实现简单BaseDao实例
# java利用注解实现简单的excel数据读取
# Java注解的简单入门小案例
# 自定义
# 遍历
# 给大家
# 类中
# 也会
# 都在
# 子类
# 之处
# 希望能
# 此类
# 这篇
# 小编
# 可想而知
# 大家多多
# 作用于
# 加载
# 文档
# 使用了
# 引入了
# Documented
相关文章:
广州商城建站系统开发成本与周期如何控制?
如何高效配置IIS服务器搭建网站?
香港服务器租用每月最低只需15元?
如何选择建站程序?包含哪些必备功能与类型?
如何在宝塔面板中创建新站点?
详解jQuery停止动画——stop()方法的使用
建站之星会员如何解锁更多建站功能?
如何选择靠谱的建站公司加盟品牌?
微信h5制作网站有哪些,免费微信H5页面制作工具?
建站之星后台密码如何安全设置与找回?
如何选择高效可靠的多用户建站源码资源?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
,交易猫的商品怎么发布到网站上去?
建站主机与服务器功能差异如何区分?
如何配置FTP站点权限与安全设置?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
制作网站外包平台,自动化接单网站有哪些?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
微信推文制作网站有哪些,怎么做微信推文,急?
如何在服务器上配置二级域名建站?
Java解压缩zip - 解压缩多个文件或文件夹实例
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何快速完成中国万网建站详细流程?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何选择服务器才能高效搭建专属网站?
如何快速搭建高效WAP手机网站吸引移动用户?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何用低价快速搭建高质量网站?
招贴海报怎么做,什么是海报招贴?
宝塔面板如何快速创建新站点?
香港服务器部署网站为何提示未备案?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何在IIS中新建站点并配置端口与IP地址?
制作网站的基本流程,设计网站的软件是什么?
建站之星安装模板失败:服务器环境不兼容?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
C++时间戳转换成日期时间的步骤和示例代码
外贸公司网站制作,外贸网站建设一般有哪些步骤?
移民网站制作流程,怎么看加拿大移民官网?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
红河网站制作公司,红河事业单位身份证如何上传?
建站主机服务器选购指南:轻量应用与VPS配置解析
广州美橙建站如何快速搭建多端合一网站?
建站之星下载版如何获取与安装?
Swift开发中switch语句值绑定模式
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
*请认真填写需求信息,我们会在24小时内与您取得联系。