【面试加分项】java自己定义注解之解析注解
我之前的博客中说明过自己定义注解的声明今天我们来看看怎样对我们自己定义的注解进行使用。
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自己定义注解之解析注解的更多相关文章
- 【面试加分项】java自己定义注解之申明注解
之前的博客http://blog.csdn.net/u010590685/article/details/47029447介绍了java的注解的基本知识今天我们学习怎样使用自己定义注解. 首先我们要声 ...
- Java单例模式实现,一次性学完整,面试加分项
单例模式是设计模式中使用最为普遍的一种模式.属于对象创建模式,它可以确保系统中一个类只产生一个实例.这样的行为能带来两大好处: 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而 ...
- 面试加分项-HashMap源码中这些常量的设计目的
前言 之前周会技术分享,一位同事讲解了HashMap的源码,涉及到一些常量设计的目的,本文将谈谈这些常量为何这样设计,希望大家有所收获. HashMap默认初始化大小为什么是1 << 4( ...
- 「美团面试系列」面试加分项,这样说你会JVM,面试官还能问什么
Java性能调优都是老生常谈的问题,特别当“糙快猛”的开发模式大行其道时,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 比如,下面这些典型的性能问题,你肯定或多或少都遇到过: 在进行性 ...
- Java基础教程——解析注解
解析注解 Java 5开始,java.lang.reflect包下的反射API可以在运行时读取Annotation. 应用:定义一个自动执行方法的注解,解析注解.通过反射执行方法,替代配置文件. pa ...
- java注解,通过反射解析注解,模仿hibernate,获取sql语句。
常用注解: 自定义注解,标准格式: 1,target:注解作用域 2,Retention:声明周期 运行子类继承,但是子类继承只能作用到类注解,字段注解,是继承不了的. 使用注解:通过下面这种方式,为 ...
- javaSE高级篇6 — 注解( 附:注解底层解析 ) —— 更新完毕
注解 ---- 英文:annotation 1.注解长什么样子? @xxxxxxx( 一些信息 ) ----- 这个信息可有可无 2.注解可以放在什么地方? 类本身的上面.属性的上面.方法的上面.参数 ...
- @Aspect 注解切面解析
注解切面解析 注解切面解析器 /** * 注解切面解析器 */ public class BeanFactoryAspectJAdvisorsBuilder { /** * Bean 工厂 */ pr ...
- (转)秒懂,Java 注解 (Annotation)你可以这样学 ---- 重要 注解定义与反射解析
转:http://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片. 这处图片引自老罗的博客.为了避免不必要的麻烦,首先声明我个人 ...
随机推荐
- NPOI--------------.Net操作Excel初步使用(导出)
背景 因公司项目需要添加数据导出功能故此添加,找了几种方式发现该方式具有 无需依赖本机安装office环境,使用灵活等优点故采用此方式. 安装 Nuget 直接安装NPOI即可 使用方式 1.根据需要 ...
- No-7.运算符
数学符号表链接:https://zh.wikipedia.org/wiki/数学符号表 01. 算数运算符 是完成基本的算术运算使用的符号,用来处理四则运算 运算符 描述 实例 + 加 10 + 20 ...
- Python数据类型方法
Python认为一切皆为对象:比如我们初始化一个list时: li = list('abc') 实际上是实例化了内置模块builtins(python2中为__builtin__模块)中的list类: ...
- python3.x Day4 模块!!
json and pickle模块 用途是为了持久化信息,这种持久化方式可以和其他程序语言兼容,一般都支持json,json只能持久化数据,pickle是python特有的方式,可以持久化所有信息和数 ...
- assert.throws()函数详解
assert.throws(block[, error][, message]) Node.js FS模块方法速查 期望 block 函数抛出一个错误. 如果指定 error,它可以是一个构造函数.正 ...
- 关于使用mongodb中遇到的时间戳雷同的问题
文不对题,实际上不是时间戳,而是我们使用js取当前毫秒数,将他看为时间戳,每次updata的时候,获取当前毫秒数,把它当做create_time的默认值,自动添加到我们的数据库中,数据模型如下 开始的 ...
- 集训第六周 E题
E - 期望(经典问题) Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit S ...
- UvaLive 4863 Balloons(贪心)
题意: 给定n个队伍, 然后A房间有a个气球, B房间有b个气球, 然后给出每个队伍所需要的气球数量和到A B房间的距离, 求把气球全部送到每个队伍的最短距离. 分析: 在气球充足的情况下, 那么我们 ...
- 关于Windows 10 初始安装的VS2013 SSDT-BI 的BUG 问题
初始安装,正常安装会出现以下出现信息,随后会被告知未安装成功. 关于SSDT-BI信息可以参见这里 http://jimshu.blog.51cto.com/3171847/1420469 从Wind ...
- CodeForcesGym 100517I IQ Test
IQ Test Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForcesGym. Orig ...