详解Spring 注解之@Import 注入的各种花活
今天来分享一下pig4cloud中涉及的@Import的注入形式。通过不同形式的注入方式,最大程度使得架构简洁。
@Import导入一个组件
来看EnablePigxDynamicRoute这个注解,当我们需要开始动态数据源时,只需要在main方法加上此注解即可。
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import(DynamicRouteAutoConfiguration.class) public@interfaceEnablePigxDynamicRoute{ }
实际核心是引入DynamicRouteAutoConfiguration这个配置类,此类并未被Spring扫描管理
写个简单的例子
publicclassDog{ } @Import({Dog.class}) @SpringBootApplication publicclassSpringLearnApplication{ publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcontext=SpringApplication.run(SpringLearnApplication.class,args); Assert.isTrue(context.containsBean("com.pig4cloud.spring.learn.demo1.Dog"),"errordogbean"); } }
注意Dog并未增加上文的声明式注解,注入了一个全类型名称的Bean
ImportSelector接口
顾名思义导入的选择器,当@Import引入的类是ImportSelector接口的实现时,会按照此选择器进行匹配注入
publicclassDogImportSelectorimplementsImportSelector{ @Override publicString[]selectImports(AnnotationMetadataimportingClassMetadata){ ...匹配逻辑查询出来一堆要注入的全类名 returnnewString[]{"com.pig4cloud.spring.learn.demo1.Dog"}; } }
@Import({DogImportSelector.class}) @SpringBootApplication publicclassSpringLearnApplication{ publicstaticvoidmain(String[]args){ ConfigurableApplicationContextcontext=SpringApplication.run(SpringLearnApplication.class,args); Assert.isTrue(context.containsBean("com.pig4cloud.spring.learn.demo1.Dog"),"errordogbean"); } }
ImportBeanDefinitionRegistrar
当@Import引入的是ImportBeanDefinitionRegistrar接口实现类,会自动引入registerBeanDefinitions定义的Bean
以pig的资源服务器配置设置,自动引入了一个PigxResourceServerConfigurerAdapter的类,且bean名称为resourceServerConfigurerAdapter
publicclassPigxSecurityBeanDefinitionRegistrarimplementsImportBeanDefinitionRegistrar{ @Override publicvoidregisterBeanDefinitions(AnnotationMetadatametadata,BeanDefinitionRegistryregistry){ GenericBeanDefinitionbeanDefinition=newGenericBeanDefinition(); beanDefinition.setBeanClass(PigxResourceServerConfigurerAdapter.class); registry.registerBeanDefinition(SecurityConstants.RESOURCE_SERVER_CONFIGURER,beanDefinition); } }
这也就意味着,若使用EnablePigxResourceServer注解即可开启pig4cloud封装的oauth资源客户端操作类,也是源码的入口
@Import({PigxSecurityBeanDefinitionRegistrar.class}) public@interfaceEnablePigxResourceServer{ }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。