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

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. BEGIN - 开始一个事务块

    SYNOPSIS BEGIN [ WORK | TRANSACTION ] DESCRIPTION 描述 BEGIN 初始化一个事务块, 也就是说所有 BEGIN 命令后的用户语句都将在一个事务里面执 ...

  2. viewer && ImageFlow 图片滚动组件 图片点击放大 可以滚轮放大缩小 viewer

    ImageFlow https://finnrudolph.com/products/imageflow https://github.com/countzero/ImageFlow http://w ...

  3. PDO 错误处理模式

    异常模式: $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 这个模式需要配合 try 使用 :一旦出错,就会: 1. ...

  4. 安装Subversion1.82(SVN)

    安装Subversion1.82(SVN)插件 简介    :SVN是团队开发的代码管理工具,它使我们得以进行多人在同一平台之下的团队开发. 解决问题:Eclipse下的的SVN插件安装. 学到    ...

  5. ORACLE IN 与NOT IN 的性能区别

    业务问题大概可以这样描述,一个父表,一个子表,查询的结果是找到子表中没有使用父表id的记录,这种情况估计很多系统都会牵涉得到.让我们来举一个例子: 表一: 父表 parent 表二: 子表 child ...

  6. php使用命名空间时自动加载机制

    命名空间主要为了解决用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突.不过并不是你定义了使用命名空间的类,就可以在任何地方随意使用了,需要在程序运行时将定义命名空间的类文 ...

  7. python 多线程并发threading & 任务队列Queue

    https://docs.python.org/3.7/library/concurrency.htmlpython程序默认是单线程的,也就是说在前一句语句执行完之前后面的语句不能继续执行先感受一下线 ...

  8. Python之基础练习题

    Python之基础练习题 1.执行 Python 脚本的两种方式 2.简述位.字节的关系 解:8位是一个字节 3.简述 ascii.unicode.utf-8.gbk 的关系 4.请写出 “李杰” 分 ...

  9. 【Codeforces 444A】DZY Loves Physics

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 两个点的子图他们的"密度"是比所有联通生成子图都要大的 "只要胆子大,遇到什么问题都不怕!" [代码] ...

  10. jQuery学习之------对标签属性的操作

    jQuery学习之------标签的属性 <a href=””>链接</a>此处的href就是该a标签带有的属性 在js中对标签的属性的操作方法有 1.1getAttribut ...