JAVA 注解-学习篇(2)

人盡茶涼 提交于 2019-11-28 09:45:57

本文内容承接Java 注解-学习篇(1)https://my.oschina.net/u/2948232/blog/791668

自定义注解

  1. 声明 @interface用来声明一个注解,即在声明一个类时,把class变成@interface。就能成功声明一个注解了。
  2. 参数 其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
  3. 调用 根据元注解规定的范围,使用@注解名(参数列表)调用。
  4. 应用场景 要用好注解,必须熟悉java 的反射机制,注解的解析完全依赖于反射

第一个注解

这是一个Marker annotation(类体里面没有成员)测试注解。

package anotations;

/**
 * 自定义注解
 * Created by Administrator on 2016/11/26.
 */
public @interface Controller {
}

注解的调用,因为没有规定范围

package controller;

import anotations.Controller;

/**
 * Created by Administrator on 2016/11/26.
 */
@Controller//在类前面
public class ControllerDemo {
    @Controller//在属性前面
    private String str;
    
    @Controller//在方法前面
    public void say(){
        System.out.println("hello world");
    }
}

###使用元注解修饰 主要使用@Retention、@Target元注解修饰,元注解说明参考https://my.oschina.net/u/2948232/blog/791668 。下面案例注解可以在虚拟机中运行,这个主要方便测试,以及解析。

import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解
 * Created by Administrator on 2016/11/26.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Controller {
}

###注解参数 注解中声明参数,返回值类型只能是基本类型、Class、String、enum

package anotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解
 * Created by Administrator on 2016/11/26.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Controller {
    String str();
    int id() default 0;
    Class<Long> gid();
}

调用有参数的注解需要注意;

  1. 只有一个参数时,可以在调用时不使用参数名。
  2. 参数有default值时,可以在调用时不出现在参数列表中。下面的案例中id列表是可以不填写的。
package controller;

import anotations.Controller;

/**
 * Created by Administrator on 2016/11/26.
 */
@Controller(str="test",id=1,gid=Long.class)//在类前面
public class ControllerDemo {
    private String str;

    public void say(){
        System.out.println("hello world");
    }
}

还有最重要的一步,我们学习注解,就是为了解析注解,这是最为核心的一步。请看下一个章节。

未完待续!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!