spring boot项目自动加载引入外部bean

2023-11-16

前言:
spring boot项目简化了对外部项目的引入,使我们能够狠方便的构建一个web项目,我们通常在开发的过程中会开发出一些公用的模块组件,这样在项目找那个引入后能够直接使用,减少了轮子的重复构造,同时服务引入的模块化操作,能够更多的节省资源和开发效率。那么在这个过程中,我们需要对外部引入的资源bean需要进行注入扫描,这样,我们在关住构建自身的服务同时,也需要对外部的依赖进行管理,同时也可能出现各种各样的问题,那么我们有没有一种方法只需要对外部的组件进行gav引入,就直接可以上手使用了呢,这种问题早已经有了解决方案,本文就简单快速的介绍一下这种解决方案的思路和方法。

1、构建你的公共组件模块

1、在公共组件模块resources目录下,新建META-INF(META-INF 相当于一个信息包,目录中的文件和目录获得 Java 2 平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务manifest.mf文件,在打包时自动生成。)文件夹,其实这种方式是参照Java中的SPI扩展机制来实现,有兴趣的朋友可以去了解下。

扩展下spi,java spi的具体约定为:当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定。jdk提供服务实现查找的一个工具类:java.util.ServiceLoader

2、当前文件下下新增spring.factories文件,里面新增如下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
xxx.yyy.zzz.extension.redis.config.RedisConfig,
说明:如果需要换行,需要在每行的文末添加反斜杠()
以上内容的第一行标识告诉spring需要自动加载当前的配置,第二行,就是你在当前的模块中需要自行加载的bean文件。模块目录结构具体如下图
在这里插入图片描述
小结: 通过以上的操作,我们就可以把自定义的公共组件打包成一个sdk,这样,其他的如何服务只要需要使用我们的组件,只需要引入当前sdk组件依赖的gav就可以行进行使用了。

2、spring boot服务引入依赖gav

<dependency>
    <groupId>com.xxx.yyy</groupId>
    <artifactId>xxx-extension-obs</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

好了,在springboot项目中引入以上模块的gav后,我们就直接可以使用公共模块的bean了,此时在类中只需要通过@Resource @Autowired 等等注解配置就可以直接使用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring boot项目自动加载引入外部bean 的相关文章

随机推荐

  • 存储路径_存储多路径

    今天的话题是存储多路径 三国开篇 天下大势 合久必分 分久必合 我觉得用来形容多路径也非常贴切 它可以将多条路径整合成一条 也可以在单条路径出现问题时迅速切换 先简单介绍下多路径 IT存储系统在构建的时候 为了最大化保证安全 通常会采用冗余
  • C++实现——LCS-最大公共子串长度

    求两个字符串的最长公共子串的长度 子串不一定是原串中的连续子串组成 LCS 使用动态规划 include
  • Python基础知识及概念

    Python基础知识及概念 1 注释 单行注释 这是一个单行注释 在程序开发时 同样可以使用 在代码的后面 旁边 增加说明性的文字 但是 需要注意的是 为了保证代码的可读性 注释和代码之间 至少要有 两个空格 示例代码如下 print he
  • Vue-Quill-Editor 设置编辑器中文字的默认字体大小

    Vue Quill Editor 默认字体看起来有些小 如下 设置默认字体大小 ql container 设置默认字号 font size 16px 设置之后
  • 利用jsqlparser解析SQL语句

    时常会遇到很多情况 我们需要对SQL语句进行替换或者拼接 以往我们可能会用StringBuild来进行拼接 StringBuilder sql new StringBuilder sql append select from sql app
  • 开发框架Furion之Winform+SqlSugar

    目录 1 开发环境 2 项目搭建 2 1 创建WinFrom主项目 2 2 创建子项目 2 3 实体类库基础类信息配置 2 3 1 Nuget包及项目引用 2 3 2 实体基类创建 2 4 仓储业务类库基础配置 2 4 1 Nuget包及项
  • pytorch 人脸识别

    import torch import os import numpy as np import torch nn as nn import matplotlib pyplot as plt import time import torch
  • nim游戏 C++

    如果堆中石头的数量 nn 不能被 44 整除 那么你总是可以赢得 Nim 游戏的胜利 class Solution public bool canWinNim int n if n lt 0 return 0 else return n 4
  • 头插法和尾插法的详细区别

    浅析线性表 链表 的头插法和尾插法的区别及优缺点 线性表作为数据结构中比较重要的一种 具有操作效率高 内存利用率高 结构简单 使用方便等特点 今天我们一起交流一下单向线性表的头插法和尾插法的区别及优缺点 线性表因为每个元素都包含一个指向下一
  • IDE0006 加载项目时遇到了错误,已禁用了某些项目功能,例如用于失败项目和依赖于失败项目的其他项目的完整解决方案分析。

    重新打开vs2017就好了 原因猜测 vs来大姨妈了 现象是catch ex 后面是e message 单纯少个x vs没检测出来 辛辛苦苦搜个半天 可能太依赖vs了 懒人专属编辑器
  • npm私有化docker方式部署及使用说明

    一 部署nexus 本文采用docker方式部署nexus 安装docker yum install y docker 拉取nexus镜像 docker pull sonatype nexus3 准备本地映射目录 以便本地化持续存储数据 目
  • python No module named numpy. distutils._msvccompiler in numpy. distutils; trying from distutils

    在cmd 中输入 python setup py install 报错 No module named numpy distutils msvccompiler in numpy distutils trying from distutil
  • Android 报错 : FATAL EXCEPTION:main 解决方法

    今天安卓开发课上碰到的新问题 前景提示 老师让我们自己试一下那个两个页面跳转的效果 于是我就开始写了 然后报错 解决方法 逐一排查 首先要看你mainfest xml里面有没有增加Activity 当然我是加了 但是他还报错 具体代码界面
  • Ubuntu18.04 windows10双系统安装解决grub引导问题

    最近给服务器的电脑升级了ubuntu18 直接用u盘安装 老是说grub引导问题 网上有很多教程真的坑人 说的含含糊糊的 不知道在卖弄什么关子 我参照这两个教程解决了安装问题 十分钟就装好了 感谢你们 https blog csdn net
  • vue Tesseract的 ocr 文字识别

    npm结果页 https www npmjs com package tesseract js tesseract官网地址 https tesseract projectnaptha com npm结果页 npm结果页 tesseract官
  • 如何优雅的统计代码耗时

    点击上方 小强的进阶之路 选择 星标 公众号 优质文章 及时送达 预计阅读时间 16分钟 作者 Jitwxs 原文链接 底部链接可直达 https jitwxs cn 5aa91d10 html 一 前言 代码耗时统计在日常开发中算是一个十
  • R语言—列表

    文章目录 列表 定义 创建列表 List 列表 List 元素的引用 列表 List 元素的修改 访问列表元素和值 去列表化 在列表上使用apply系列函数 递归型列表 列表 R语言的6种模式 向量 矩阵 数组 数据框 列表 因子 向量 矩
  • SQLite如何删除,修改、重命名列

    今天在SQLite数据库中添加了一列 后来发现列名写错了 于是使用SQL语句来修改列名 可是根本不管用 首先 请放弃alter吧 sqlite官方说明如下 SQLite supports a limited subset of ALTER
  • 【JS】JavaScript时间与时间戳相互转换

    时间与时间戳相互转换 1 2 时间 JS常用时间类型 1 2 1 GMT 格林尼治标准时 1 2 2 UTC 协调世界时 1 2 3 中国标准时间 1 2 4 ISO8601标准时间格式 1 2 5 时间戳 timestamp 1 时间戳转
  • spring boot项目自动加载引入外部bean

    前言 spring boot项目简化了对外部项目的引入 使我们能够狠方便的构建一个web项目 我们通常在开发的过程中会开发出一些公用的模块组件 这样在项目找那个引入后能够直接使用 减少了轮子的重复构造 同时服务引入的模块化操作 能够更多的节