SpringBoot中的ImportSelector类动态加载bean详解
更新时间:2024年01月29日 08:54:49 作者:梨轻巧
这篇文章主要介绍了SpringBoot中的ImportSelector类动态加载bean详解,ImportSelector接口是spring中导入外部配置的核心接口,根据给定的条件(通常是一个或多个注释属性)判定要导入那个配置类,在spring自动化配置和@EnableXXX中都有它的存在,需要的朋友可以参考下
ImportSelector类动态加载bean
实现ImportSelector类→ 动态加载bean → 源码中大量使用
代码
package com.qing.config; import org.springframework.context.annotation.ImportSelector; import org.springframework.core.type.AnnotationMetadata; import java.util.Map; public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata metadata) { //metadata元数据 : 指的是加载本类MyImportSelector的类 //metadata的get、has、is 有大量方法,可以用来获取判断数据 Map<String, Object> annotationAttributes = metadata.getAnnotationAttributes("org.springframework.context.annotation.ComponentScan"); System.out.println("注解"+annotationAttributes); boolean hasConfiguration = metadata.hasAnnotation("org.springframework.context.annotation.Configuration"); if(hasConfiguration){ return new String[]{"com.qing.bean.cat"}; } return new String[]{"com.qing.bean.dog"}; } }
元数据metadata指的是下面的config6
package com.qing.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; //@Configuration 注解是测试用的 @Configuration //@ComponentScan 注解是测试用的 @ComponentScan("com.qing.bean") @Import(MyImportSelector.class) public class SpringConfig6 { }
测试
package com.qing.app; import com.qing.config.SpringConfig6; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App6 { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig6.class); String[] names = ctx.getBeanDefinitionNames(); for (String name : names) { System.out.println("bean的名字:" + name); } } }
结果
因为元数据上有@Configuration注解,所以返回的是cat
元数据上没有@Configuration注解了,所以返回的是dog
总结
到此这篇关于SpringBoot中的ImportSelector类动态加载bean详解的文章就介绍到这了,更多相关ImportSelector类动态加载bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Boot Mail QQ企业邮箱无法连接解决方案
这篇文章主要介绍了Spring Boot Mail QQ企业邮箱无法连接解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-09-09Mybatis配置之<typeAliases>别名配置元素解析
这篇文章主要介绍了Mybatis配置之<typeAliases>别名配置元素解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07java 查询oracle数据库所有表DatabaseMetaData的用法(详解)
下面小编就为大家带来一篇java 查询oracle数据库所有表DatabaseMetaData的用法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11
最新评论