四、java注解:知识梳理,自定义注解,使用场景举例

引言:当前javaEE应用主流框架如Spring 会用很多注解来做框架功能支持,包括自己做系统功能的开发设计,也会自定义注解,这就有必要掌握java 中的注解基础知识,来方便理解框架底层原理、和利于自身平时的开发。

java中注解分为三大类 : 预定义注解、元注解、自定义注解
主要作用:用来做代码解析(通过反射)
本质 :是个 继承 java.lang.anotation Anotation 类的接口

image.png

1、预定义注解

包括 : @SupperssWarnings 、 @Override 、@Deprecated、@FunctionalInterface
其中@Override 比较常见不多介绍

1.1 过时注解 @Deprecated

代码示例: 用在方法m1()上,可以看到方法 m1() 被调用时,会有一条划线,代表过时。


image.png

1.2 压制注解 @SupperssWarnings

代码示例 : 用在类和方法上,一般传入“all”,用来压制警告和过时,可以看到方法 m1() 已经没有划线。


image.png

1.3 函数式接口注解 @FunctionalInterface

是jdk8引入的,用来支持lambda表达式,代码示例参考本文第 3 部分。
注意 : 要求必须只有一个抽象方法

2、元注解

是注解的注解,用来支持自定义注解。包括 @Target 、@Rentention、@Documented 、@inherited
其中:

  • @Target
    定义起作用的位置: 类,方法,属性
    入参 : ElementType.TYPE ,ElementType.METHOD ,ElementType.FIELD
  • @Rentention
    定义有效范围
    RetentionPolicy.SOURCE(源码阶段),CLASS(编译阶段), RUNTIME(JVM运行阶段)
  • @Documented
    定义是否包含在生成的JavaDOC中
  • @inherited
    定义能否被继承

3、自定义注解

格式 :
元注解
public @interface 注解名称{
属性列表;
}
属性的返回值类型有:基本数据类型、String、枚举、注解、以上类型的数组

  • 注解使用时的属性名就是 定义时的方法名。
  • 一个注解中只定义一个属性且名为value时,是默认属性名,使用时可以忽略不写,比如springMVC中的
    @GetMapping("/")
  • 代码示例:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnotion {

    String value() default "aaa"; //如果没有设置默认值,使用时必须赋值,value也是注解的默认属性,如@GetMapping("/aa")
    int  intval();  //default 111;
    int[] intvalArr();
    MyAnotion2 anno2();
    FruitEnum enumval();
}
//测试
class  TestAnno{

    @MyAnotion(intval = 1,intvalArr={1,2},anno2=@MyAnotion2(1),enumval=FruitEnum.APPLE)
    public void m01(){

        //lambda
        MyfuctionalInferface myfuctionalInferface = () ->{
            System.out.println("a");
        };
    }
}
//第二个注解
 @interface MyAnotion2{
    int value();
}
//函数式接口的定义
@FunctionalInterface
interface MyfuctionalInferface{

    void dd();
}
public enum FruitEnum {

    APPLE,ORANGE;
}
  • 注解在web中应用场景1

可以结合springAOP功能做切面功能:权限拦截,日志切面,后续web技术文集会有介绍,敬请期待_

你可能感兴趣的:(四、java注解:知识梳理,自定义注解,使用场景举例)