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