zoukankan      html  css  js  c++  java
  • java自定义注解

    Java注解

      Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中出现。

    在写代码过程常遇到的注解有@Override、@SuppressWarnings,@Override注解表示重写父类方法,、@SuppressWarnings注解表示忽略警告信息

    关于四个作用相同注解
         @Component("info")   不分层
         @Repository("info")  dao
         @Service("info")     biz
         @Controller("info")  action

         @Value()    在一个类中注入普通属性值

         @Resource   在一个类中注入域属性

         @Autowired  在一个类中注入域属性

    注解(Annotation)自定义注解入门

    元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
        1.@Target,
        2.@Retention,
        3.@Documented,
        4.@Inherited

      这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。

    @Target:

       @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

    作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

      取值(ElementType)有:

        1.CONSTRUCTOR:用于描述构造器
        2.FIELD:用于描述域
        3.LOCAL_VARIABLE:用于描述局部变量
        4.METHOD:用于描述方法
        5.PACKAGE:用于描述包
        6.PARAMETER:用于描述参数
        7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

    使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

      定义注解格式:
      public @interface 注解名 {定义体}

      注解参数的可支持数据类型:

        1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
        2.String类型
        3.Class类型
        4.enum类型
        5.Annotation类型
        6.以上所有类型的数组

    自定义注解案例:

    1.自定义注解

    复制代码
    1 @Target(ElementType.METHOD)
    2 @Retention(RetentionPolicy.RUNTIME)
    3 @Documented
    4 public @interface Apple {
    5     String name();
    6     String sex() default "男";
    7     String phone() default "15931787945";
    8     int age() default 2;
    9 }
    复制代码

    2.使用注解的类:

    1 public class AppleTest {
    2     @Apple(name="张朵朵")
    3   public void show(){
    4 
    5     }
    6 }

    3.提取注解参数:

    复制代码
     1 public class Test20171010{
     2    @Test
     3     public void test01(){
     4         Class<AppleTest> appleTestClass = AppleTest.class;
     5         try {
     6             Apple show = appleTestClass.getMethod("show").getAnnotation(Apple.class);
     7             System.out.println(show.name());
     8             System.out.println(show.sex());
     9             System.out.println(show.phone());
    10             System.out.println(show.age());
    11         } catch (NoSuchMethodException e) {
    12             e.printStackTrace();
    13         }
    14     }
    15 }
    复制代码

    执行结果:

  • 相关阅读:
    事件的记忆碎片
    委托的记忆碎片
    Jquery的集合方法EACH()
    sql server中的 SET NOCOUNT ON 的含义
    nyist 299 Matrix Power Series
    poj 1061 青蛙约会
    nyist 488 素数环
    nyist 301 递推求值
    nyist 95 众数问题
    nyist 640 Geometric sum
  • 原文地址:https://www.cnblogs.com/wyl123/p/7690579.html
Copyright © 2011-2022 走看看