编程语言
首页 > 编程语言> > Java注解使用! 转载// 项目中页数这么用,已经很深入了

Java注解使用! 转载// 项目中页数这么用,已经很深入了

作者:互联网

先来一个例子

class Father
{
	public void f()
	{}
}
public class Son extends Father{
	@Override
	public void f()
	{}
}

@Controller
public class StudentController {

什么是注解

 public interface Annotation {
     boolean equals(Object obj);
     int hashCode();
     String toString();
     Class<? extends Annotation> annotationType();
}

注解的种类

JDK内置系统注解

@Override

@Deprecated

@SuppressWarnnings

元注解

@Target

ElementType含义
ElementType 含义
ANNOTATION_TYPE 注解类型声明
CONSTRUCTOR 构造方法声明
FIELD 字段声明(包括枚举常量)
LOCAL_VARIABLE 局部变量声明
METHOD 方法声明
PACKAGE 包声明
PARAMETER 参数声明
TYPE 类、接口(包括注解类型)或枚举声明
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;


@Target(ElementType.FIELD)
public @interface MyAnnotation {

}

   

@Retention

RetentionPoicy意义
SOURCE 源文件中保留,比如@Override,用于与编译器交互
CLASS source,Class文件保留,用于编译时生成额外的文件
RUNTIME sorce,class文件,运行时保留

@Documented

import java.lang.annotation.Documented;
@Documented
public @interface Demo
{

}

@Inherited


@Inherited
@Retention( RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
	String msg() default "jiajun";
}



@MyAnnotation
class Father
{

}
class son extends Father{
	
}
	
public class Demo6
{
	public static void main(String[] args) {
		Father f=new son();
		System.out.println(Arrays.toString(f.getClass().getAnnotations()));
	}
}
//输出:[@MyAnnotation(msg=jiajun)]

自定义注解

格式

@Retention源码

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     * Returns the retention policy.
     * @return the retention policy
     */
    RetentionPolicy value();
}

使用

实验

@Retention( RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
	String msg() default "jiajun";
}


@MyAnnotation(msg="666")
class Test1
{}
public class Test2 {
	
	public static void main(String[] args) {
		Test1 t=new Test1();
		Class c=t.getClass();
		MyAnnotation ma = (MyAnnotation) c.getAnnotation(MyAnnotation.class);
		System.out.println(ma.msg());
	}
	
}

访问注解

访问类注解

@Retention( RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
    String name() default "jiajun";
}
@MyAnnotation(name="jiajun")
public class Test {
}
public static void main(String[] args) {
        Class clazz = Test.class;
        Annotation[] annotations = clazz.getAnnotations();
        for(Annotation annotation : annotations){
            if(annotation instanceof MyAnnotation){
                MyAnnotation myAnnotation = (MyAnnotation) annotation;
                System.out.println("name: " + myAnnotation.name());
            }
        }
}

访问方法注解

@Retention( RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String name() default "jiajun";
}

public class Test {
    @MyAnnotation(name="jiajun")
    public void doSomething(){}
}


public class Demo {
    public static void main(String[] args) {
        Class clazz=Test.class;
        Method[]  methods=clazz.getMethods();
        for(Method method :methods)
        {
            if(method.getName()=="doSomething")
            {
                Annotation annotation = method.getAnnotation(MyAnnotation.class);
                if(annotation instanceof MyAnnotation){
                    MyAnnotation myAnnotation = (MyAnnotation) annotation;
                    System.out.println("name: " + myAnnotation.name());
                }
            }
        }
    }
}

访问参数注解

@Retention( RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface MyAnnotation {
    String name() default "jiajun";
}
public class Test {
    public static void doSomething(
            @MyAnnotation(name="jiajun") String parameter){
    }
}
public class Demo {
    public static void main(String[] args) {
        Class clazz=Test.class;
        Method[]  methods=clazz.getMethods();
        for(Method method :methods)
        {
            if(method.getName()=="doSomething")
            {
                Annotation[][] parameterAnnotations = method.getParameterAnnotations();
                Class[] parameterTypes = method.getParameterTypes();

                int i=0;
                for(Annotation[] annotations : parameterAnnotations){
                    Class parameterType = parameterTypes[i++];

                    for(Annotation annotation : annotations){
                        if(annotation instanceof MyAnnotation){
                            MyAnnotation myAnnotation = (MyAnnotation) annotation;
                            System.out.println("param: " + parameterType.getName());
                            System.out.println("name : " + myAnnotation.name());
                        }
                    }
                }
            }
        }
    }
}

我是一个大懒逼!

我是一个大懒逼

我是一个大懒逼

我是一个大懒逼

我是一个大懒逼

作者:jiajun 出处: http://www.cnblogs.com/-new/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。

 

标签:Java,name,页数,MyAnnotation,public,interface,注解,class
来源: https://www.cnblogs.com/Lazy-1bird/p/15800182.html