博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 注解 入门
阅读量:4673 次
发布时间:2019-06-09

本文共 2792 字,大约阅读时间需要 9 分钟。

这几天在学习Spring3.x,发觉现在许多框架都用上了java注解功能,然后自己就对java注解这方面初步学习了一下。

 

首先,注解跟注释不是一个意思,也根本不是同一个事物。

注释就是我们平常平常中对代码作解释的,也就是常见的"//..........."和"/*..............*/",相信大家也很熟悉,这里就不多说了。

 

对于注解,可以说是一个非常有用的技术,何为注解,其实注解就是作为一种描述,是对代码的一种描述,并且是可以读取的,可以是在程序运行时写进文件的的一种对代码的描述。(个人理解)

 

我们平常在一些IDE(如Eclipse)编写代码过程中,可能会遇过一些代码有下波浪线或者是中间穿一条线的代码,会告诉你不提倡使用这个方法,说这个方法可能会在以后的版本中被淘汰之类的提示语,

其实这就是注解在帮助你。

因为在java5.0(jdk1.5)后,java默认内置了@Deprecated注解,他的存在就是上述的功能,除此之外还有还有@Override,@SuppressWarnings,至于其他两个的作用,大家就自己去探索啦。

 

注解的强大之处,就是我们可以自定义自己需要的注解!

 

  首先,注解跟类,接口一样,都是一种类型

定义一个注解的用法跟定义接口差不多,区别是多了一个@:

@interface MyAnnotation{

String value() default "NULL";

}

这样就定义了一个属于你自己的注解了。

 

注解本身也是代码,当然也有注解可以描述注解。

这个读起来有点怪异,但是这个是一个重要的特征,注解的注解就是描述注解的作用范围,生存范围的。

对注解的描述有四种,包括:

@Target({ElementType.METHOD})//描述注解的作用范围,ElementType.METHOD是参数,表示只能作用于方法,例如

@MyAnnotation()  //这是错误的

public class AnnotataionTest{

@MyAnnotataion() //这是正确的

public void test(){

}

}

其余三种,作用如下:

@Retention

表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

SOURCE:注解将被编译器丢弃

CLASS:注解在class文件中可用,但会被VM丢弃

RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。

@Document

将注解包含在Javadoc中

@Inherited

允许子类继承父类中的注解

 

 

自定义注解又有什么用?怎么用呢? 

 对于注解的使用,我就使用自己编写的一个例子,有什么不好的地方大家轻拍- -#

首先,新建一个自定义注解

package my.annotation.i;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface MyAnnotation {String value() default "NULL";}

 然后写一个测试注解的类

package my.annotation.impl;import my.annotation.i.MyAnnotation;public class AnnotationTest {@MyAnnotation("This is method 1")	public String method1(String s){	System.out.println("method1 is invoked,params is "+s);	return s;	}   public String method2(String s){	   System.out.println("method2 is invoked,params is "+s);	   return s;   }   @MyAnnotation("This is method 3")   public String method3(String s){	   System.out.println("method3 is invoked,params is "+s);	   return s;   }}

 最后写一个Client,注解就大显身手了

package my.annotation.client;import java.lang.reflect.AnnotatedElement;import java.lang.reflect.Method;import my.annotation.i.MyAnnotation;import my.annotation.impl.AnnotationTest;public class Client {public static void main(String[] args) throws Exception{	Class cs = Class.forName("my.annotation.impl.AnnotationTest");	        Method[] methods = cs.getDeclaredMethods();	        for(Method method:methods){	        	if(method.isAnnotationPresent(MyAnnotation.class)){	        		MyAnnotation aTest = method.getAnnotation(MyAnnotation.class);	        	    method.invoke(cs.newInstance(),aTest.value());	        	}	        }}}

 输出如下:

method1 is invoked,params is This is method 1

method3 is invoked,params is This is method 3

 

这是我对java注解的初步了解,可能有什么错误的地方,大家谅解- -#

 

转载于:https://www.cnblogs.com/dick159/p/4316400.html

你可能感兴趣的文章