最近在学习框架,发现框架中注解用的挺多的,似乎官方也推荐使用注解。感觉注解还是和代码耦合在了一起不像xml那样配置完全外化,可能还是xml方便维护一些。不过好处是真的非常的方便,代码极少,不像xml看起来那样的臃肿。
下面是个人的一些整理,希望对大家有点帮助:
1、基本概念
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
2、3个内建注解
@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上。
@SuppressWarnings:表示关闭一些不当的编译器警告信息。
3、4个元注解
分别为@Target,@Retention,@Documented,@Inherited。
@Target
表示该注解用于什么地方(限制注解),可能的ElemenetType参数包括:
- ElemenetType.CONSTRUCTOR构造器声明。
- ElemenetType.FIELD域声明(包括enum实例)。
- ElemenetType.LOCAL_VARIABLE局部变量声明。
- ElemenetType.METHOD方法声明。
- ElemenetType.PACKAGE包声明。
- ElemenetType.PARAMETER参数声明。
- ElemenetType.TYPE类,接口(包括注解类型)或enum声明。
@Retention
表示在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
- RetentionPolicy.SOURCE注解将被编译器丢弃。
- RetentionPolicy.CLASS注解在class文件中可用,但会被VM丢弃。
- RetentionPolicy.RUNTIMEVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
@Documented
将此注解包含在javadoc中
@Inherited
允许子类继承父类中的注解
4、自定义注解
//定义注解 package org.hgs.Annotation; public @interface MyAnnotation { //定义属性 String value(); //属性默认值 String name() default "姓名"; int age() default 22; }
//使用注解 package org.hgs.Annotation; public class TestAnnotation { //使用带属性的注解时,需要给属性赋值,定义时给予默认属性值,这可以不带属性值 @MyAnnotation(value = "good",name="张三",age=24) public void getObjectInfo(){ } }
5、下面看一个测试注解例子就一目了然了:
package org.hgs.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.ElementType; //定义注解 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface MyAnnotation { //定义属性 String value(); //属性默认值 String name() default "姓名"; int age() default 22; int[] array() default {1,2,3}; String color(); }
package org.hgs.Annotation; //使用注解 @MyAnnotation(value = "good",name="张三",age=24, color = "red" ,array={3,4,5}) public class TestAnnotation2 { public static void main(String[] args) { // 检查类AnnotationTest是否含有@MyAnnotation注解 if (TestAnnotation2.class.isAnnotationPresent(MyAnnotation.class)) { // 若存在就获取注解 MyAnnotation annotation = (MyAnnotation) TestAnnotation2.class .getAnnotation(MyAnnotation.class); System.out.println(annotation); // 获取注解属性 System.out.println(annotation.color()); System.out.println(annotation.value()); // 数组 int[] arrs = annotation.array(); for (int arr : arrs) { System.out.println(arr); } } } }
相关推荐
Java 第二阶段建立编程思想 【枚举和注解】---- 代码 Java 第二阶段建立编程思想 【枚举和注解】---- 代码 Java 第二阶段建立编程思想 【枚举和注解】---- 代码 Java 第二阶段建立编程思想 【枚举和注解】---- 代码 ...
java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解代码java注解...
JAVA设计模式--程序设计--反射--注解--泛型
内容概要:通过带着读者编写Java基础语法测试代码,理解基础数据类型-注解-数组-inet-反射-oop-Java代码实现过程和测试代码 适合人群:初学java语法入门测试代码 能学到什么:①注解、数组、数据类型、inet、method...
Java 注解技术详解
---注解---.xmind Java常用各种注解
本文档内容包括: 1.注解详细内容(五个内置注解、...2.java动态性(静态语言、动态语言、反射机制操作(类、属性、注解、构造器)、动态编译、脚本引擎Rhino动态执行JavaScript代码、动态Java字节码操作) --author:
Java 基础(5_8) - 注解机制详解
spring注解 -----最简单的注解与自动装配例子
java注解详解[文].pdf
Spring MVC学习(六)-------注解式控制器详解1
java程序使用JPA注解详解 JPA注解详解 java 程序使用 JPA注解 详解
这是一个java注解的详解demo,详细对你很有用
spring3 注解 详解spring3 注解 详解spring3 注解 详解
java程序使用JPA注解详解.doc
02-Java注解面试题(2题)-新增
java-excel导入导出注解版内用教程说明
使用注解控制java事务, 类似spring处理,代码干净简洁
java程序使用JPA注解详解.zip java程序使用JPA注解详解.zip java程序使用JPA注解详解.zip java程序使用JPA注解详解.zip java程序使用JPA注解详解.zip
NULL 博文链接:https://wangming2012.iteye.com/blog/1941123