栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

注解不够用?自定义注解来帮忙

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

注解不够用?自定义注解来帮忙

一、相关概念

注解是一种特殊的接口,其继承了Annotation,其具体实现类是java运行时的动态代理类,我们可以通过反射获取到动态代理对象,再通过代理对象,就可以调用接口中定义的方法。

元注解是可以加在注解上的注解。元注解是不可以自定义的。元注解分为以下四个类型,现在通过图表来一一进行讲解。

1.@Retention 

该注解是用来标注一个注解的生命周期,其参数包含 以下几种:

RetentionPolicy.SOURCE源文件有效
RetentionPolicy.CLASSclass文件有效
RetentionPolicy.RUNTIME程序运行期间有效

2.@Targe

该注解可以被声明在哪些元素前,其参数包含以下几种:

ElementType.TYPE注解只能被声明在一个类、接口、枚举前
ElementType.FIELD注解只能被声明在一个类的字段前
ElementType.METHOD注解只能被声明在一个类的方法前
ElementType.PARAMETER注解只能被声明在一个方法参数前
ElementType.CONSTRUCTOR该注解只能声明在一个类的构造方法前
ElementType.LOCAL_VARIABLE该注解只能声明在一个局部变量前
ElementType.ANNOTATION_TYPE该注解只能声明在一个注解类型前
ElementType.PACKAGE注解只能声明在一个包名前

3.@Inherited

该注解将会被子类继承,如果定义的注解修饰了类A,那么类A的子类类B也会默认被修饰。

4.@documented

添加该注解表明在生成JavaDoc文档时,该注解也会出现在javaDoc文档中。

二、创建自定义注解 创建注解

我们首先创建自定义注解@TestSource

@Retention(RetentionPolicy.RUNTIME)
@Targe(ElementType.FIELD)
@Inherited 
@documented
public @interface TestSource {

	public String my() default "this is it";
	public int i() default 0;
}

注解的类型为@interface,并且在注解上加上了四个元注解,四个元注解的作用,可以参考上面所列的图表。

注解参数

注解的参数,只能使用public或者默认default来进行修饰,并且只能使用基本的数据类列,包括:byte、short、char、int、long、float、double、boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这些类型的数组类型,并且注解可以使用默认值

三、注解使用

我们新建一个Test类,并为类中属性加上自定义注解

public class Test {

	@TestSource(my="test",i=1)
	private String test;
	
}

这里,我们为test属性增加了注解,其中my属性设置为test,序号i设置为1

四、反射注解

即然我们对属性test加上了注解,那么我们在程序运行过程中,也可以拿到注解的内容,具体可以通过以下方法,来拿到注解内容

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
try {
		Test test = new Test();
		Field field = test.getClass().getDeclaredField("test");
		field.setAccessible(true);
		TestSource testSource = field.getAnnotation(TestSource.class);
		System.out.println(testSource.my());
		System.out.println(testSource.i());
}catch(Exception e)
{
	e.printStackTrace();
}

}
}
五、结论

注解最开始的用处就是通过切面来给类、方法、或属性来加上一个标签,通过自定义的注解,我们可以灵活的在自己开发的代码中加上各类标签,也能更好的掌控自己的代码。

------------------------------------------------------------

欢迎关注我的公众号,获取更多信息

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/324836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号