当前位置: 首页 > news >正文

总结:Spring Boot 之spring.factories

一、介绍

Spring IOC会将所有的对象交由Spring管理,扫描对象是在Spring boot的路径下的所有配置类注解,需要管理的对象。

但是:如果这些Bean路径不在Spring Boot的包扫描路径下,怎么办?这样不就实例化不了了吗?

有两种方式解决这个问题:

方式一:通过在启动类中加上@Import注解,以 SwaggerConfig 为例。
@Configuration @EnableSwagger2 public class SwaggerConfig implements EnvironmentAware { private static final Logger log = LoggerFactory.getLogger(SwaggerConfig.class); @Autowired private Environment env; @Value("${swagger.scan.package}") private String swaggerScanPackage; public SwaggerConfig() { } @Bean public Docket createRestApi() { Predicate<String> path = PathSelectors.any(); if (Arrays.asList(this.env.getActiveProfiles()).contains("prod")) { path = PathSelectors.none(); } return (new Docket(DocumentationType.SWAGGER_2)).apiInfo(this.apiInfo()).select().apis(RequestHandlerSelectors.basePackage(this.swaggerScanPackage)).paths(PathSelectors.any()).build(); } private ApiInfo apiInfo() { return (new ApiInfoBuilder()).title("APIs").description("…………").termsOfServiceUrl("https://js.dazhi.loan.com").version("1.0").build(); } @Override public void setEnvironment(Environment environment) { } }

启动类上加上@Import注解,如下:

但是有个问题,当这类配置比较多的时候,启动类会很繁琐。

方式二:使用spring.factories

采用spring.factories 的方式去加载SwaggerConfig类,在resources目录下新建一个META-INF 的目录,然后在
新建一个spring.factories 的文件,里面的内容为:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

com.sg.config.SwaggerConfig

这样也可以加载到SwaggerConfig。

二、spring.factories加载使用

Spring boot使用SpringFactoriesLoader来加载spring.factories。

可通过Spring boot启动源码的获取监听器方法查看。

根据对下面代码的追踪可知,最终是通过读取META-INF/spring.factories读取里面的监听器类然后做响应的操作。

SpringApplicationRunListeners listeners = getRunListeners(args);

http://www.jsqmd.com/news/475788/

相关文章:

  • Claroty 与 SSH 双双入选 Gartner 《CPS 安全远程访问市场指南》 代表性供应商 名单
  • 企业系统数据孤岛最有效的解决方法是什么?
  • Anaconda launch Juperty lab时显示拒绝访问文件。文件不可读,它可能已被移动或删除,或者文件权限可能正在阻止访问。
  • 如何通过WinUtil实现Windows系统全方位管理:从基础优化到高级定制
  • Python实现简易数据统计工具(附代码解析)
  • 数字图像鉴真技术:从原理到实践的深度学习解决方案
  • Cocos Creator 3 语音聊天实战:从 WebRTC 集成到生产环境优化
  • Kimi-VL-A3B-Thinking完整指南:日志排查、错误定位、性能监控运维手册
  • 如何高效解决幻兽帕鲁存档迁移难题:palworld-host-save-fix终极指南
  • SDXL-Turbo惊艳效果展示:文字输入‘neon rain’后画面实时泛起光晕
  • ORA-39012: Client detached EXPDP stop task DBMS_DATAPUMP
  • 人是世界上最聪明的动物
  • Redis面试题 04
  • Cursor taking longer than expected 问题这样解决
  • OpenClaw 选择 API 的核心:以 “执行闭环” 为中心的模型与能力调度
  • Qwen-Ranker Pro案例研究:新闻推荐系统的精排模块实现
  • 「一本通 6.7 练习 3」取石子题解两种解法详解(记搜+分讨)
  • 大模型客服智能体效率提升实战:从架构优化到并发处理
  • 数字图像鉴真技术:从算法原理到行业实践指南
  • Flowise镜像免配置教程:docker run flowiseai/flowise快速上手
  • Qwen-Image-Lightning Java学习路线可视化:知识图谱生成
  • 基于REX-UniNLU的智能知识图谱构建
  • 【Iced】Iced Beacon 库分析
  • UnityPackage Extractor:脱离Unity环境的资源提取工具技术解析
  • 快速验证机器人抓取逻辑:在快马平台用AI十分钟搭建OpenClaw101仿真原型
  • Qwen3-VL-8B智能体(Agent)开发指南:构建多模态任务自动化流程
  • java第一章笔记
  • Lingbot-Depth-Pretrain-VitL-14:剖析其背后的卷积与注意力混合网络架构
  • Llama-3.2V-11B-cot应用落地:农业病虫害图识别+防治措施推理推荐系统
  • Z-Image-Turbo-辉夜巫女效果对比:不同算法优化下的图像质量与生成速度