Java中自定义注解类及使用实例解析
这篇文章主要介绍了Java中自定义注解类并使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在Java框架中,经常会使用注解,而且还可以省很多事,来了解下自定义注解。
注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响
先写一个自己的注解类
@Documented//会被javadoc命令识别
@Retention(RetentionPolicy.RUNTIME)//相当于作用时期,比如:运行期、编译期
@Target({ElementType.METHOD})//相当于作用域,比如方法、类
public@interfaceMyValue{
Stringvalue();
//也可以这么写,就是说,它的默认值是hello
//Stringvalue()default"hello";
}
然后解析上边用到的那两个类:
publicenumRetentionPolicy{
SOURCE,
CLASS,
RUNTIME
}
publicenumElementType{
/**Class,interface(includingannotationtype),orenumdeclaration*/
TYPE,
FIELD,
METHOD,
PARAMETER,
CONSTRUCTOR,
LOCAL_VARIABLE,
ANNOTATION_TYPE,
PACKAGE
}
可以看到,是两个枚举类,也就是我们自定义的注解有一定的时间和空间作用域。
好了,我们的自定义注解已经完成了(对的,自定义注解就上边那一段代码),那我们就来看看要怎么有用呢?很容易啊,就和其他的注解一样,写在我们要用到的地方就好了。(对的,我确定不是在开玩笑)
publicclassPerson{
@MyValue(value="张三")
privateStringname;
/*
为什么要写setter和getter,很快你就会知道
*/
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
}
然后我们在其他地方去拿
Personperson=newPerson(); System.out.println(person.getName());//null //这就很难受,按道理来说,不是应该是张三吗?
大家都知道,像Spring这种框架都是通过反射来实现的,我们就模拟一个“编译类”,我们是在属性上用的注解,所以就先用反射来拿到类的所有属性
publicstaticvoidmain(String[]args)throwsNoSuchFieldException{
Personperson=newPerson();
//按理来说,我们是拿到这个Person.class的所有的属性,然后遍历,来挨个注入,但是这里我们明明确我们的属性名,所以就简单化了
Fieldfield=Person.class.getDeclaredField("name");
MyValueannotation=field.getAnnotation(MyValue.class);//拿到注解类
Stringname=annotation.value();//这个value()就是我们在MyValue类中的的属性
//然后我们就注入到这个类中,这时就用到了setter方法
person.setName(name);
System.out.println("通过自定义注解后的person的name是:"+person.getName());
}
是的,这样我们就通过了自定义注解给Person注入了一个name属性,但是在实际运用中不可能这么复杂,这只是入门了一下,我们可以将这个“模拟的编译类”组装成一个工具类,以便我们在实际中运用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
6 保研的祝福语简短
10 年轻20岁祝福语简短
11 朋友结婚祝福语信息简短
12 女孩婚礼贺卡祝福语简短
13 30段点歌简短祝福语
14 虎年春节祝福语图文简短
15 写给后妈祝福语大全简短
16 简短回复生日祝福语
17 校长送毕业祝福语简短
18 毕业立体贺卡祝福语简短