您的位置:首页 > 编程语言

自定义注解的简单实现例子,附上代码和测试结果图

2016-09-25 23:16 666 查看
看了注解,然后又看了简单的注解的例子,自己还是亲自动手,操作一下代码,来的印象深刻些。

一下是一个简单的例子:代码注释很详细了。

package com.xxx.model.configcenter;

import java.lang.annotation.*;
import java.lang.reflect.Method;

/**
* 简单注解(1):标注在方法上
*/
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
@interface Name {
String aa();
}

/**
* 简单注解(2):标注在类上
*/
@Target(ElementType.TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@interface Description {
String value();//属性
}

@Description(value = "此注解标注在类上,这是一个学生类")
class Student {
@Name(aa = "此注解标注在方法是上,这是一个方法")
public void say() {
System.out.println("aaa");
}

@Name(aa = "此注解标注在方法是上,说明这个学生来源")
public void des() {
System.out.println("大师兄。");
}
}

/**
* 测试注解的用法
* <p>
* Created by lxk on 2016/9/25
*/
class TestAtInterface {
public static void main(String[] args) {
//调用注解解析器
parseAtInterface();
}

/**
* 注解解析器
*/
private static void parseAtInterface() {
Class studentClass;//学生类即本文件内的Student类
try {
//这个是Java反射的简单用法。我下文会附上Java反射的相关目录,只要肯看完,Java反射绝对可以了解
//这个反射在框架里面用的还是蛮多的,很有必要知道,就像hashmap的源码有必要了解一下一样
studentClass = Class.forName("com.xxx.model.configcenter.Student");//会异常
if (studentClass.isAnnotationPresent(Description.class)) {//如果该注解存在,present是存在不是parent
Description description = (Description) studentClass.getAnnotation(Description.class);
System.out.println(description.value());
}
Method[] methods = studentClass.getMethods();

System.out.println(methods.length);
for (Method method : methods) {
//下一句代码是看看这个类一共有多少方法,每个类都继承object类,当然包含父类的一些方法
//想看看的话可以打开,为了测试效果,我注释了。
//System.out.println(method.getName());
if (method.isAnnotationPresent(Name.class)) {//如果该注解存在
Name name = (Name) method.getAnnotation(Name.class);
System.out.println(name.aa());
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();//实际开发里面的log可不能这么处理
}
}
}

以上是代码的例子,因为我的测试,都是把代码放在一个文件里面搞的测试,省去了建很多个文件的麻烦,也是为了测试的简单。然后就可以解释为什么有些给权限比如public。。。的省略了。可以直接拷贝出去放在一个文件里面就直接运行了,对于复制粘贴党来说。多安逸啊。

下面上测试的运行结果图。



*  自定义注解
*   一个自定义注解必须有
@Target  说明这个注解标注在哪个部位
@Retention  说明注解的作用范围
*  @interface 说明是当前的文件或者说是类是一个注解类
*  注解类中可以有属性
比如:String value();还可以有其他的,不止一个。可以多个或者一个都没有
*  注解解析器
用来解析标注在类上的注解


上面是简单的概览式的总结。

关于Java反射的理解和例子的以及HashMap的源码的理解的链接如下:(有时间真的看看,不然怎么进阶呢。)

(链接1)注意看字:这个只是开始了解反射可以干嘛,然后你继续挨着看几篇就可以看明白反射了。呀库锁库哟!

(链接2)注意:这个是讲述1.7的Java HashMap的原理,这个真的还是了解下比较好。当然我也是连着总结了好几篇,不介意的,挨个都翻阅一下还是很有收获的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐