今天来分享一下 pig4cloud 中涉及的 @import 的注入形式。通过不同形式的注入方式,最大程度使得架构简洁。
@import导入一个组件
来看 enablepigxdynamicroute 这个注解,当我们需要开始动态数据源时,只需要在main 方法加上此注解即可。
@target({elementtype.type})
@retention(retentionpolicy.runtime)
@documented
@inherited
@import(dynamicrouteautoconfiguration.class)
public @interface enablepigxdynamicroute {
}
实际核心是引入 dynamicrouteautoconfiguration 这个配置类,此类并未被spring 扫描管理
写个简单的例子
public class dog {
}
@import({dog.class})
@springbootapplication
public class springlearnapplication {
public static void main(string[] args) {
configurableapplicationcontext context = springapplication.run(springlearnapplication.class, args);
assert.istrue(context.containsbean("com.pig4cloud.spring.learn.demo1.dog"), "error dog bean");
}
}
注意 dog 并未增加上文的声明式注解,注入了一个全类型名称的bean
importselector 接口
顾名思义导入的选择器,当 @import 引入的类是 importselector 接口的实现时,会按照此选择器进行匹配注入
public class dogimportselector implements importselector {
@override
public string[] selectimports(annotationmetadata importingclassmetadata) {
... 匹配逻辑查询出来一堆要注入的全类名
return new string[]{"com.pig4cloud.spring.learn.demo1.dog"};
}
}
@import({dogimportselector.class})
@springbootapplication
public class springlearnapplication {
public static void main(string[] args) {
configurableapplicationcontext context = springapplication.run(springlearnapplication.class, args);
assert.istrue(context.containsbean("com.pig4cloud.spring.learn.demo1.dog"), "error dog bean");
}
}
importbeandefinitionregistrar
当@import 引入的是 importbeandefinitionregistrar 接口实现类,会自动引入 registerbeandefinitions 定义的bean
以pig 的资源服务器配置设置,自动引入了一个 pigxresourceserverconfigureradapter 的类,且 bean 名称为 resourceserverconfigureradapter
public class pigxsecuritybeandefinitionregistrar implements importbeandefinitionregistrar {
@override
public void registerbeandefinitions(annotationmetadata metadata, beandefinitionregistry registry) {
genericbeandefinition beandefinition = new genericbeandefinition();
beandefinition.setbeanclass(pigxresourceserverconfigureradapter.class);
registry.registerbeandefinition(securityconstants.resource_server_configurer, beandefinition);
}
}
这也就意味着,若使用 enablepigxresourceserver 注解即可开启 pig4cloud 封装的oauth 资源客户端操作类,也是源码的入口
@import({pigxsecuritybeandefinitionregistrar.class})
public @interface enablepigxresourceserver {
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!