java 注解@interface
类注解:
package com.cglibs; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; // 适用类、接口(包括注解类型)或枚举
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ClassInfo {
String value();
}
field属性注解
package com.cglibs; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; // 适用field属性,也包括enum常量
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldInfo {
int[] value();
}
方法注解
package com.cglibs; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; // 适用方法
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodInfo {
String name() default "long";
String data();
int age() default 27;
}
参数注解
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
// package com.cglibs; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoUserModel {
boolean value() default true;
boolean require() default true;
String message() default "user is null";
}
测试类
package com.cglibs; /**
* 测试运行时注解
*/
@ClassInfo("Test Class")
public class RuntimeAnnotation { @FieldInfo(value = {1, 2})
public String fieldInfo = "FiledInfo"; @FieldInfo(value = {10086})
public int i = 100; @MethodInfo(name = "BlueBird", data = "Big")
public static String getMethodInfo(@AutoUserModel(value = false,require = true) @AutoPlatformModel String a) {
System.out.println("RuntimeAnnotation.getMethodInfo "+a);
return RuntimeAnnotation.class.getSimpleName();
}
}
运行
package com.cglibs; import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays; /**
* 测试运行时注解
*/
public class TestRuntimeAnnotation {
/**
* 测试运行时注解
*/
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Class<?> cls = RuntimeAnnotation.class;
// 获取指定类型的注解
sb.append("Class注解:").append("\n");
ClassInfo classInfo = cls.getAnnotation(ClassInfo.class);
if (classInfo != null) {
sb.append(Modifier.toString(cls.getModifiers())).append(" ")
.append(cls.getSimpleName()).append("\n");
sb.append("注解值: ").append(classInfo.value()).append("\n\n");
} sb.append("Field注解:").append("\n");
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
FieldInfo fieldInfo = field.getAnnotation(FieldInfo.class);
if (fieldInfo != null) {
sb.append(Modifier.toString(field.getModifiers())).append(" ")
.append(field.getType().getSimpleName()).append(" ")
.append(field.getName()).append("\n");
sb.append("注解值: ").append(Arrays.toString(fieldInfo.value())).append("\n\n");
}
} sb.append("Method注解:").append("\n");
Method[] methods = cls.getDeclaredMethods();
for (Method method : methods) {
MethodInfo methodInfo = method.getAnnotation(MethodInfo.class);
if (methodInfo != null) {
sb.append(Modifier.toString(method.getModifiers())).append(" ")
.append(method.getReturnType().getSimpleName()).append(" ")
.append(method.getName()).append("\n");
sb.append("注解值: ").append("\n");
sb.append("name: ").append(methodInfo.name()).append("\n");
sb.append("data: ").append(methodInfo.data()).append("\n");
sb.append("age: ").append(methodInfo.age()).append("\n");
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
for (Annotation[] a : parameterAnnotations
) {
if (a != null) {
for (Annotation b : a
) {
if (AutoUserModel.class.isAssignableFrom(b.annotationType())) {
AutoUserModel b1 = (AutoUserModel) b;
sb.append("找到了 AutoUserModel =").append(b1.value()).append("\n");
}
if (AutoPlatformModel.class.isAssignableFrom(b.annotationType())) {
AutoPlatformModel b1 = (AutoPlatformModel) b;
sb.append("找到了 AutoPlatformModel =").append(b1.value()).append("\n");
}
}
} }
}
}
System.out.print(sb.toString());
}
}
java 注解@interface的更多相关文章
- JAVA注解@Interface基础知识
java注解是在JDK5时引入的新特性,大多数框架(SpringBoot.MyBatis.Quartz)背后都在大量使用注解开发. 一.先进行一个小试验,了解注解开发流程 建立maven项目annot ...
- @interface java注解
@Documented,@Retention,@Target,@Inherited 1. 编写自定义@Todo注解经常我们在写程序时,有时候有些功能在当前的版本中并不提供,或由于某些其它原因,有些方法 ...
- Java注解
Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...
- 19.Java 注解
19.Java注解 1.Java内置注解----注解代码 @Deprecated //不推荐使用的过时方法 @Deprecated ...
- Java注释@interface的用法【转】
Java用 @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类.@Override,@Deprecated,@SuppressWarnings为 ...
- Java注解入门
注解的分类 按运行机制分: 源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...
- java注解(Annotation)解析
注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- Java注释@interface的用法
转---------- java用 @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类.@Override,@Deprecated,@Suppr ...
随机推荐
- linux实操_shell预定义变量
当前进程号: 运行后 后台最后一个进程号: 运行后
- docker部署项目,对镜像,容器的操作
服务器上的项目访问不了,所以我去看了看容器,果然 那我就删除容器呗 :docker rm 容器id docker rm f097e24a9a0f 说明:从镜像到容器,同一个镜像构建多个运行的 Dock ...
- Vue-main.js中的一些配置
import Vue from 'vue' import App from './App.vue' import router from './router' import store from '. ...
- C# IFormattable 接口重写
public class Racer : IComparable<Racer>, IFormattable { public int Id { get; private set; } pu ...
- .net+文件夹上传
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...
- 转载:appium踩过的坑
原文地址:http://blog.csdn.net/wirelessqa/article/details/29188665 自己的操作:由于在window上安装appium时,报各种错误:所以选择在u ...
- 「CQOI2006」简单题 线段树
「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可 ...
- 【线性代数】7-1:线性变换思想(The Idea of a Linear Transformation)
title: [线性代数]7-1:线性变换思想(The Idea of a Linear Transformation) categories: Mathematic Linear Algebra k ...
- Java面向对象6(AA ~ AE)
AE 简单的复数运算(类和对象) (SDUT 4303) import java.util.*; class Complex { int a, b; Complex() { } Complex(in ...
- (转)初试 Netflix 开源持续云交付平台 Spinnaker
目录 Spinnaker 介绍 环境.软件准备 安装 Development Spinnaker 配置依赖环境 配置并安装 Spinnaker 演示 Spinnaker Pipeline 演示 Spi ...