java的 import注解_详解Spring 注解之@Import 注入的各种花活

今天来分享一下 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 {

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值