美文网首页Java注解
JAVA注解原理 - 感性认识

JAVA注解原理 - 感性认识

作者: rockops | 来源:发表于2017-03-31 23:26 被阅读201次

一、什么是注解?

注解的英文是annotation,就是使用@符号来标注类、方法、类成员、局部变量、方法参数等。用于表示一些特殊的含义。比如我们常见的@Controller, @Service, @Repository, @Autowired等。

二、为什么要有注解? 注解有什么作用?

我理解这跟编程思想中的DRY(don't repeat yourself)的原则是吻合的。用统一的一个标识符@来标识一组具有相同属性的对象。
在Spring中,框架会自动扫描被标注的类,并把使用@Componet标注的类以bean的形式注入到框架中。方便供框架管理这些类的创建与销毁。
我们常用的JUnit,也会自动扫描被@Test标注的方法,认为它们是单独供JUnit框架管理的单测方法。
所以,使用注解,就是为了方便我们为类、方法、属性、参数等对象打一个标签,做一个标识。开发框架或架构师可以根据这些标识做自己的逻辑处理。

三、如何实现自定义注解?

3.1 通过元注解来实现注解

拿我们经常用到的@Autowired来举例,

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

    /**
     * Declares whether the annotated dependency is required.
     * <p>Defaults to {@code true}.
     */
    boolean required() default true;

}

解释:
通过 @interface 来声明一个注解。

@Target 说明注解所修饰的对象范围,取值的话,有

  1. CONSTRUCTOR: 构造器
  2. FIELD: 域
  3. LOCAL_VARIABLE: 局部变量
  4. METHOD: 方法
  5. PACKAGE: 包
  6. PARAMETER: 参数
  7. TYPE: 类、接口、enum声明

@Retention描述注解的生命周期,在什么时候生效,有3个

  1. SOURCE
  2. CLASS
  3. RUNTIME

@Documented说明可被javadoc此类工具文档化

@Inherited说明被标注的类型是被继承的(// TODO 举例说明)

3.2 如何获取注解名与值

通过反射。关于什么是反射,会单独写一个笔记来记录。在这里,我们先有一个概念,就是可以通过某一种方法来获取注解的名称,以及其中的值。
// todo 举例

@Hello
public class Any {

}

属性上的

@Hello
private String name;

相关文章

网友评论

    本文标题:JAVA注解原理 - 感性认识

    本文链接:https://www.haomeiwen.com/subject/ltxcuttx.html