自定义注解初探

一直都觉得注解是很难理解的概念,今天尝试着自己也写了一个注解,才发现有的时候真不能依靠感觉或想象,“绝知此事要躬行”,要想知道注解的用法,还要写起来才行。

所以就先从一个例子开始吧。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Component
public @interface ServiceAnnotation {
    Class value();
}

自定义了一个注解 ServiceAnnotation 。要想了解注解定义的规则,最好的办法是看源码。
比如:

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     * 注解将会被编译器忽略
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     * 注解将被编译器记录在class文件中,但在运行时不会被虚拟机保留,这是一个默认的行为
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此可以通过反射方式读取它们
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

应用:所有实现Service接口的类上全部应用@ServiceAnno注解

@ServiceAnno(Service.class)
public class ServiceImpl implements Service {

}

为何要使用自定义注解。本次使用注解的目的是在spring的包扫描中找到Service接口的实现类。因此在Service的实现类上加上@ServiceAnnotation ,spring扫描包时,通过@ServiceAnnotation 注解,便可以获取实现Service接口的所有类。

你可能感兴趣的:(自定义注解初探)