java注解编程@since 1.8
一、基本元注解:
@Retention:
说明这个注解的生命周期
RetentionPolicy.SOURCE -> 保留在原码阶段,编译时忽略
RetentionPolicy.CLASS -> 保留在编译阶段,不会被加载到jvm
RetentionPolicy.RUNTIME -> 加载到jvm运行中
@Target:
指明注解运用之处
ElementType.Type -> 作用于类、接口、枚举
ElementType.FIELD -> 属性
ElementType.METHOD -> 方法
ElementType.PARAMETER -> 方法的参数
ElementType.CONSTRUCTOR -> 构造方法
ElementType.LOCAL_VARIABLE -> 局部变量
ElementType.ANNOTATION_TYPE -> 作用于注解
ElementType.PACKAGE -> 作用于包
ElementType.TYPE_PARAMETER
ElementType.TYPE_USE
@Documented:
表示文档
@Inherited:
表示继承,作用在父类时子类可以拥有父类的注解
@Repeatable:
表明标记的注解维护一个容器,并且可以多次应用于相同的属性或声明
容器注解:
具体注解:
作用于方法:
二、注解的属性:
1、注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。
2、属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。数组属性在使用时可以加{}表示数组,也可以不加表示数组中只有一个元素。
三、注解的综合运用:
注解一般结合反射使用,通过反射模板对象获取注解的类型和属性值。
注解与反射:
1、java1.5在反射包中引入了 java.lang.reflect.AnnotatedElement 接口,该接口主要用于注解类型和属性的处理。
Class、Field、Method类的父类或超类都有实现AnnotatedElement 接口。
该类的子类Field、Method等关于AnnotatedElement 的方法必须被重写
2、AnnotatedElement 接口的基本方法:
isAnnotationPresent(); 判断该元素上是否存在某个类型的注解。
getAnnotation()/getDeclaredAnnotation(); 通过注解类型获取注解对象,从而获取注解的属性值。
getAnnotations()/getDeclaredAnnotations(); 获取注解集合。 3、代码片段:
public static void main(String[] arg) throws NoSuchMethodException, NoSuchFieldException, SecurityException{
Class<UserController> userClass = UserController.class;
// 获取类上的注解
// 判断该对象是否有该注解
if (userClass.isAnnotationPresent(RequestMapping.class)) {
RequestMapping requestMapping = userClass.getDeclaredAnnotation(RequestMapping.class);
String[] value = requestMapping.value();
System.out.println("UserController类上RequestMapping注解的属性:" + Arrays.toString(value));
}else {
System.out.println("UserController类上没有RequestMapping注解!");
} // 获取属性上的注解
Field getField = userClass.getDeclaredField("userService");
SuperBug fSuperBug = getField.getDeclaredAnnotation(SuperBug.class);
String[] fValue = fSuperBug.value();
System.out.println("userService属性上SuperBug注解的值:" + Arrays.toString(fValue)); // 获取方法上的注解
Method getMethod = userClass.getDeclaredMethod("getUserList1", String.class);
SuperBug mSuperBug = getMethod.getDeclaredAnnotation(SuperBug.class);
String[] mValue = mSuperBug.value();
System.out.println("getUserList1方法上SuperBug注解的值:" + Arrays.toString(mValue)); // 获取方法上的所有注解反射模板class
// getDeclaredAnnotations返回该元素上直接声明的注释(不包括继承)
Annotation[] annotations = getMethod.getDeclaredAnnotations();
for (Annotation annotation : annotations) {
Class<? extends Annotation> aClass = annotation.annotationType();
if ("com.superbug.word.annotation.SuperBug".equals(aClass.getTypeName())) {
SuperBug superBug1 = (SuperBug) annotation;
System.out.println(superBug1.toString());
}
}
}
java注解编程@since 1.8的更多相关文章
- 初学java注解编程 记录错误及解决办法
1 :在form表单提交到controller层时 利用hbim的封装的访问数据库 form表单中属性要加上method方法 不然不成功. 2 :在运行eclipse时 有时粘贴个数据或者删除个字段老 ...
- java注解编程
- Java并发编程中的相关注解
引自:http://www.cnblogs.com/phoebus0501/archive/2011/02/21/1960077.html Java并发编程中,用到了一些专门为并发编程准备的 Anno ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- JAVA 注解的几大作用及使用方法详解【转】
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- 框架基础——全面解析Java注解
为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...
- Java注解实践
Java注解实践 标签 : Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK ...
- Java注解全面解析(转)
1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...
- java注解(基础)
一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...
随机推荐
- 第一个progressive web application,发车!
progressive web application是谷歌推出的一种渐进式web应用,通过利用service-worker等来达到类似于原生应用,而且在chrome浏览器还可以添加到主页,完全就和一 ...
- Redis的客户端Jedis
1. Redis支持消息的订阅与发布 Redis的消息订阅支持:先订阅后发布 订阅:subscribe c1 c2 发布:publish c2 hello-redis 支持通配符的订阅:psubscr ...
- 微信支付签名算法JavaScript版,参数名ASCII码从小到大排序;0,A,B,a,b;
// 支付md5加密获取sign paysignjs: function (jsonobj) { var signstr = this.obj2str(jsonobj) signstr = signs ...
- JavaScript版EAN码校验算法
<script type="text/javascript"> $(document).ready(function () { $("#btnCalc&q ...
- Android Studio使用阿里云Aliyun Maven仓库
如下所示,在build.gradle中添加Aliyun Maven仓库 // Top-level build file where you can add configuration options ...
- 装饰器模式-Decerator
一.定义 装饰器模式又叫做包装模式(Wrapper).装饰器模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 在以下情况下应该使用装饰器模式: 1.需要扩展一个类的功能,或给一个类增 ...
- RMQ Direct
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11792398.html RMQ Direct Project Directory Maven Depe ...
- [POJ 1911] 棋盘
问题描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘.(每次切割都只能沿着 ...
- 对webpack的初步研究7
Configuration 您可能已经注意到很少有webpack配置看起来完全相同.这是因为webpack的配置文件是导出对象的JavaScript文件.然后,webpack根据其定义的属性处理此对象 ...
- MainRun
package Testlink; import java.io.IOException; public class MainRun { public static void main(String[ ...