@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 { }