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
相关文章:
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Python如何创建带属性的XML节点
音乐网站服务器如何优化API响应速度?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
建站主机空间推荐 高性价比配置与快速部署方案解析
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
C#怎么创建控制台应用 C# Console App项目创建方法
无锡营销型网站制作公司,无锡网选车牌流程?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
建站主机SSH密钥生成步骤及常见问题解答?
网站企业制作流程,用什么语言做企业网站比较好?
如何通过商城自助建站源码实现零基础高效建站?
seo网站制作优化,网站SEO优化步骤有哪些?
如何快速生成可下载的建站源码工具?
如何用y主机助手快速搭建网站?
建站三合一如何选?哪家性价比更高?
jQuery 常见小例汇总
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
建站之星与建站宝盒如何选择最佳方案?
如何批量查询域名的建站时间记录?
装修招标网站设计制作流程,装修招标流程?
C++如何使用std::optional?(处理可选值)
临沂网站制作企业,临沂第三中学官方网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
制作宣传网站的软件,小红书可以宣传网站吗?
制作农业网站的软件,比较好的农业网站推荐一下?
自助网站制作软件,个人如何自助建网站?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
建站之星如何保障用户数据免受黑客入侵?
制作销售网站教学视频,销售网站有哪些?
广平建站公司哪家专业可靠?如何选择?
制作表格网站有哪些,线上表格怎么弄?
如何确保西部建站助手FTP传输的安全性?
建站主机选择指南:服务器配置与SEO优化实战技巧
小建面朝正北,A点实际方位是否存在偏差?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
南宁网站建设制作定制,南宁网站建设可以定制吗?
视频网站制作教程,怎么样制作优酷网的小视频?
如何高效利用200m空间完成建站?
浅谈Javascript中的Label语句
清除minerd进程的简单方法
TestNG的testng.xml配置文件怎么写
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
建站之星如何配置系统实现高效建站?
如何通过NAT技术实现内网高效建站?
制作企业网站建设方案,怎样建设一个公司网站?
建站之星×万网:智能建站系统+自助建站平台一键生成
*请认真填写需求信息,我们会在24小时内与您取得联系。