自定义注解
2017-06-01 17:22
155 查看
想深入学习注解,首先要自己定义一个注解。
上一遍写过四种元注解,在自定义注解时会用到。
在自定义注解时需要继承java.lang.annotation.Annotation接口,而用
@interface即会自动继承Annotation接口了,而且自定义注解不能继承其他的注解或接口。
定义注解的方法必须声明为无参数、无异常抛出的。其实每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型,其返回值类型有限制的。可以通过default来声明参数的默认值。
定义注解格式:
public @interface 注解名 {定义体}
自定义注解所有可用返回值类型:
1. 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
2. String类型
3. Class类型
4. Enum类型
5. Annotation类型
6. 以上所有类型的数组
注解使用
反射解析注解
运行结果
源码已上传:
https://github.com/wolf521/demo/tree/master/src/main/java/com/example/demo/annotation
上一遍写过四种元注解,在自定义注解时会用到。
在自定义注解时需要继承java.lang.annotation.Annotation接口,而用
@interface即会自动继承Annotation接口了,而且自定义注解不能继承其他的注解或接口。
定义注解的方法必须声明为无参数、无异常抛出的。其实每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型,其返回值类型有限制的。可以通过default来声明参数的默认值。
定义注解格式:
public @interface 注解名 {定义体}
自定义注解所有可用返回值类型:
1. 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
2. String类型
3. Class类型
4. Enum类型
5. Annotation类型
6. 以上所有类型的数组
**自定义注解实例:**
/** * 类信息注解 **/ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface ClassInfo { String author() default "小明"; String date(); int version() default 1; String description(); }
/** * 方法信息注解 **/ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface MethodInfo { String author() default "小明"; String date(); String description(); }
注解使用
/** * Created by cuizhixiang on 2017/6/1. * 注解使用 **/ @ClassInfo(author="小华",date="07-6-17",version=1,description="注解测试类") public class AnnotionManager { @MethodInfo(author="小明",date="01-6-17",description="注解测试方法") public void method(){ } }
反射解析注解
/** * 解析ClassInfo */ private static void analysisClass(){ Class classes = AnnotionManager.class; Annotation annotation = classes.getAnnotation(ClassInfo.class); System.out.println(annotation); }
/** * 解析MethodInfo */ private static void analysisMethod(){ Class classes = AnnotionManager.class; Method[] method = classes.getMethods(); for(Method method1:method){ MethodInfo methodInfo = method1.getAnnotation(MethodInfo.class); if(methodInfo != null){ System.out.println(methodInfo); } } }
运行结果
源码已上传:
https://github.com/wolf521/demo/tree/master/src/main/java/com/example/demo/annotation
相关文章推荐
- 深入理解Java:注解(Annotation)自定义注解入门
- Spring AOP自定义注解 身份验证
- java自定义注解基础
- 自定义注解
- java自定义注解实现对象到xml配置的转换
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)里面的坑之 同一个controller部分方法可以拦截,部分方法拦截不了
- 在spring的aop中获取自定义注解的参数值,即在切面中获取annotation的参数值
- Java———Annotation自定义注解(二)*
- ssm+redis 如何更简洁的利用自定义注解+AOP实现redis缓存
- webstorm设置自定义注释/注解
- springmvc 下使用自定义注解获取登录信息
- 自定义注解,核心逻辑代码--原创
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- java自定义注解入门(2)
- 自定义注解
- Spring 关于bean的获取以及自定义注解的起始注入和获取
- Java自定义注解
- 【Annotation】使用自定义注解实现依赖注入
- Java通过反射获取自定义注解
- 自定义注解