@Import注解的作用和在使用spring的xml配置時用到的<import/>類似。但應注意是@Import在使用時必須要保證能被IOC容器掃描到,所以通常它會和@Configuration或者@ComponentScan配套使用。
@Import可以用來如下四種方式的導入:
- 帶有@Configuration注解的類
- 實現了ImportSelector接口的類
- 實現了ImportBeanDefinitionRegistrar接口的類
- 被IOC容器注冊的bean的class
@Import在使用時可以聲明在JAVA類上,或者作為元注解使用(即聲明在其他注解上)
下面是@Import的源碼:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Import { /** * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar} * or regular component classes to import. */ Class<?>[] value(); }
下面是@Import作為元注解進行使用的場景:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import({AuthorizationServerEndpointsConfiguration.class, AuthorizationServerSecurityConfiguration.class}) public @interface EnableAuthorizationServer { }