Search code examples
javaspringannotationsjava-annotations

Why is Spring's @Component Annotation RUNTIME?


I am wondering, why Spring's implementation of the @Component Annotation has RetentionPolicy.RUNTIME. Here's the official implementation from github

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {
    String value() default "";
}

In my thought, the scanning for all Spring-Components annotated with @Component would be done at compile-time and all the results (annotated classes) would somehow be stored inside the ApplicationContext. I guess I am wrong, but why does this annotation need to be RetentionPolicy.Runtime?


Solution

  • The component scanning is done at the startup, not at the compilation. Also, the aspects (AOP) are created at the runtime