我之前的博客中说明过自己定义注解的声明今天我们来看看怎样对我们自己定义的注解进行使用。

1.我们在程序中使用我们的注解。

上一篇中我们自己定义了一个注解:

@Target(ElementType.FIELD)//注解的作用范围。就是注解是用在什么地方的
@Retention(RetentionPolicy.RUNTIME)//注解的级别,就是注解能留存到什么时候
@Documented
@Inherited
public @interface MyAnnotation {
public String value();//注解能够接收的參数
}

这个注解仅仅有一个參数,所以我们在使用时不须要显示说明參数名称。以下我们写一个类并使用注解。


public class People {
@MyAnnotation("liu")
private String name;
public People() {
Inject.injectfeild(this);
}
public String getName(){
return name;
}
}

大家能够看到我们写了一个类,并在他的上面写了一个我们的注解,如果我们如今要实现的功能是把注解中的值赋值给以下的属性name,那我们该怎么做呢。在这里我们能够看到我们在构造方法中调用了Inject.injectfeild(this),这种方法就是我们对注解进行解析。接下来我们就来看看详细是怎样做的。

2.对注解进行解析

废话不多说先上代码:

public class Inject {
public static void injectfeild(Object o){
Class<?> clazz = o.getClass(); //获得传进来的类
Field[] fields = clazz.getDeclaredFields();//通过反射获取类的域(全局变量)
for (Field field : fields) {
// 查看这个字段是否有我们自己定义的注解类标志的
if (field.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation inject = field.getAnnotation(MyAnnotation.class); //获取到我们的注解
String value=inject.value();//获取注解的參数
field.setAccessible(true);
try {
field.set(o, value);//为我们的字段赋值
} catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace();
}
}
}
}
}

事实上我们就是通过反射获取了注解的值和相应的字段。在对他进行赋值。以下我们再来看看測试:

public class Test {

    public static void main(String[] args) {
People people=new People();
System.out.println(people.getName());
} }

结果:

liu

当然通常情况下一个普通的类的字段赋值我们能够直接给他一个set函数,这个样例仅仅是然大家理解怎样进行自己定义注解。可是在很多框架中他们的属性都是这样进行赋值,原因是为了解耦,有兴趣的能够学习一下ioc的相关知识。

因为上传到csdn的源代码审核还没过。须要源代码的能够在评论中留邮箱,我会尽快发过去。

【面试加分项】java自己定义注解之解析注解的更多相关文章

  1. 【面试加分项】java自己定义注解之申明注解

    之前的博客http://blog.csdn.net/u010590685/article/details/47029447介绍了java的注解的基本知识今天我们学习怎样使用自己定义注解. 首先我们要声 ...

  2. Java单例模式实现,一次性学完整,面试加分项

    单例模式是设计模式中使用最为普遍的一种模式.属于对象创建模式,它可以确保系统中一个类只产生一个实例.这样的行为能带来两大好处: 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而 ...

  3. 面试加分项-HashMap源码中这些常量的设计目的

    前言 之前周会技术分享,一位同事讲解了HashMap的源码,涉及到一些常量设计的目的,本文将谈谈这些常量为何这样设计,希望大家有所收获. HashMap默认初始化大小为什么是1 << 4( ...

  4. 「美团面试系列」面试加分项,这样说你会JVM,面试官还能问什么

    Java性能调优都是老生常谈的问题,特别当“糙快猛”的开发模式大行其道时,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 比如,下面这些典型的性能问题,你肯定或多或少都遇到过: 在进行性 ...

  5. Java基础教程——解析注解

    解析注解 Java 5开始,java.lang.reflect包下的反射API可以在运行时读取Annotation. 应用:定义一个自动执行方法的注解,解析注解.通过反射执行方法,替代配置文件. pa ...

  6. java注解,通过反射解析注解,模仿hibernate,获取sql语句。

    常用注解: 自定义注解,标准格式: 1,target:注解作用域 2,Retention:声明周期 运行子类继承,但是子类继承只能作用到类注解,字段注解,是继承不了的. 使用注解:通过下面这种方式,为 ...

  7. javaSE高级篇6 — 注解( 附:注解底层解析 ) —— 更新完毕

    注解 ---- 英文:annotation 1.注解长什么样子? @xxxxxxx( 一些信息 ) ----- 这个信息可有可无 2.注解可以放在什么地方? 类本身的上面.属性的上面.方法的上面.参数 ...

  8. @Aspect 注解切面解析

    注解切面解析 注解切面解析器 /** * 注解切面解析器 */ public class BeanFactoryAspectJAdvisorsBuilder { /** * Bean 工厂 */ pr ...

  9. (转)秒懂,Java 注解 (Annotation)你可以这样学 ---- 重要 注解定义与反射解析

    转:http://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片.  这处图片引自老罗的博客.为了避免不必要的麻烦,首先声明我个人 ...

随机推荐

  1. mac vim设置python语法高亮

    1 "显示行号  2 set nu  3   4 "设置缩进tabstop  5 set ts=4  6 set shiftwidth=4  7 set expandtab  8 ...

  2. 第2节 mapreduce深入学习:6、MapReduce当中的计数器

    第2节 mapreduce深入学习:6. MapReduce当中的计数器 计数器是收集作业统计信息的有效手段之一,用于质量控制或应用级统计.计数器还可辅助诊断系统故障.如果需要将日志信息传输到map ...

  3. PyCharm 自动添加作者及时间

    打开pycharm,快捷键ctrl + alt + s 打开模板设置自己所需内容 完整打开路径:file>settings>editor>code style>file and ...

  4. C++ 指针形参和指针引用形参的原理分析

    C++ 函数的参数传递可以分为:值传递和引用传递. 两者的最大区别也很简单,如果该函数的参数只是读的话,值传递就可以满足.如果该函数的参数需要进行修改并返回的时候,就应该进行引用传递. C++指针作为 ...

  5. 笔试算法题(32):归并算法求逆序对 & 将数组元素转换为数组中剩下的其他元素的乘积

    出题:多人按照从低到高排成一个前后队列,如果前面的人比后面的高就认为是一个错误对: 例如:[176,178,180,170,171]中的错误对 为 <176,170>, <176,1 ...

  6. [Python3网络爬虫开发实战] 4.1-使用XPath

    XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言.它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索. 所以在做爬虫时,我们完全 ...

  7. 第二次:Ubuntu16.04 安装Docker

    sudo apt-get update, 就这一个命令执行了多半天,不知道网络缘故还是怎么的,管他呢,装完总是好的. # step 1: 安装必要的一些系统工具 sudo apt-get update ...

  8. pip 打包项目配置库

    打包项目中配置库(filename为文件名,可修改) pip freeze > filename.txt 安装配置文件中所有的库包 pip install -r filename.txt 如提示 ...

  9. LeetCode(60) Permutation Sequence

    题目 The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of th ...

  10. 早期创业,应该充分利用互联网产品和服务(从”皇包车”看一家全球中文车导服务平台如何选用ToB产品)

       前段时间,在搜索"皇包车"相关的资料,于是在IT桔子网站看到了"从'皇包车'看一家全球中文车导服务平台如何选用ToB产品"这篇文章.   我是非常的震撼! ...