最近在学习框架,发现框架中注解用的挺多的,似乎官方也推荐使用注解。感觉注解还是和代码耦合在了一起不像xml那样配置完全外化,可能还是xml方便维护一些。不过好处是真的非常的方便,代码极少,不像xml看起来那样的臃肿。
下面是个人的一些整理,希望对大家有点帮助:
?
1、基本概念
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
?
2、3个内建注解
@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上。
@SuppressWarnings:表示关闭一些不当的编译器警告信息。
?
3、4个元注解
分别为@Target,@Retention,@Documented,@Inherited。
@Target
表示该注解用于什么地方(限制注解),可能的ElemenetType参数包括:
?
@Retention
表示在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
- RetentionPolicy.SOURCE注解将被编译器丢弃。
?
@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); } } } }
?
?