不多废话,直接看源码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
分析如下
-
@Component代表@Repository可以把一个类组件加入到IOC容器中
-
@Target,target注解决定MyAnnotation注解可以加在哪些成分上,如加```xml
ElementType.TYPE // 作用在类身上
ElementType.Filed) //作用到属性身上
ElementType.METHOD //作用到方法身上 -
@Retention注解决定MyAnnotation注解的生命周期
生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用
source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;被编译器忽略,如果只是做一些检查性的操作,
比如 @Override 和 @SuppressWarnings,则可选用 SOURCE 注解class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期,如果要在编译时进行一些预处理操作,比如生成一些辅助