今天来分享一下 pig4cloud
中涉及的 @Import
的注入形式。通过不同形式的注入方式,最大程度使得架构简洁。
@Import导入一个组件
来看 EnablePigxDynamicRoute
这个注解,当我们需要开始动态数据源时,只需要在main 方法加上此注解即可。
1 | less复制代码@Target({ElementType.TYPE}) |
实际核心是引入 DynamicRouteAutoConfiguration
这个配置类,此类并未被Spring 扫描管理
写个简单的例子
1 | java复制代码public class Dog { |
注意 Dog 并未增加上文的声明式注解,注入了一个全类型名称的Bean
ImportSelector 接口
顾名思义导入的选择器,当 @Import 引入的类是ImportSelector
接口的实现时,会按照此选择器进行匹配注入
1 | typescript复制代码public class DogImportSelector implements ImportSelector { |
1 | java复制代码@Import({DogImportSelector.class}) |
ImportBeanDefinitionRegistrar
当@Import 引入的是ImportBeanDefinitionRegistrar
接口实现类,会自动引入registerBeanDefinitions
定义的Bean
以pig 的资源服务器配置设置,自动引入了一个 PigxResourceServerConfigurerAdapter
的类,且bean
名称为resourceServerConfigurerAdapter
1 | reasonml复制代码public class PigxSecurityBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { |
这也就意味着,若使用EnablePigxResourceServer
注解即可开启 pig4cloud
封装的oauth 资源客户端操作类,也是源码的入口
1 | less复制代码@Import({PigxSecurityBeanDefinitionRegistrar.class}) |
本文转载自: 掘金