SpringBoot中的spi机制(1): 一个Demo了解什么是spi

2 篇文章 0 订阅
订阅专栏

什么是spi机制

英文是service provider interface,就是一种拓展点,服务发现的机制。
无
比如,Spring框架有个接口,框架已经提供三个实现,但是不满足我的需求,我想写一个自己的实现,被spring加载,这就可以通过spi机制来实现。

示例Demo

第一步 新建一个maven工程

结构如下:
项目结构
里面有两个类

package spi;

/**
 * @Author: heling
 * @Date: 2020/3/8 20:59
 * @Description:
 */
public class SpiDemo {

    public void say() {
        System.out.println("hello");
    }
}

package spi;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: heling
 * @Date: 2020/3/8 20:59
 * @Description:
 */
@Configuration
public class MyConfig {

    @Bean
    public SpiDemo spiDemo() {
        return new SpiDemo();
    }
}

使用mvn install打成jar包安装到本地。

第二步 在另一个SpirngBoot中引入第一步的jar

<dependency>
    <groupId>org.example</groupId>
    <artifactId>Test</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

启动项目

@SpringBootApplication
public class XxApplication {
	public static void main(String[] args) {

		ConfigurableApplicationContext context = SpringApplication.run(XxApplication.class, args);
		MyConfig bean = context.getBean(MyConfig.class);
		bean.spiDemo().say();
	}
}

发现并没有打印hello。因为并没有发现引入jar包里的服务。

第三步 解决问题

spring.factories
在第一步的工程里新建META-INF目录,新建Spring.factories文件。
在文件中加入:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=spi.MyConfig

最后进行install。

重新启动第二步的项目,发现打印了hello。

拓展:条件过滤

比如我启动上面的SpringBoot项目,需要项目中存在某个类才会去加载MyConfig,否则不加载。
结构
新增spring-autoconfigure-metadata.properties文件
spring-autoconfigure-metadata.properties
意思是当项目中存在Test类,才加载MyConfig。

验证

启动项目发现抱错:
在这里插入图片描述
当有Test类时候

/**
 * @Author: heling
 * @Date: 2020/3/9 23:18
 * @Description:
 */
public class Test {
}

再次启动:
控制台输出hello。

java spi 可运行 demo
03-14
java spi 可运行 demo
spring-boot动态注入简单实例.zip
08-25
spring-boot动态注入简单实例,通过SPI机制,简单实现了博客的内容,博客地址如下https://blog.csdn.net/liman65727/article/details/100052856
剖析 SPI 在 Spring 的应用
vivo互联网技术
06-21 386
本文通过对Spring SPI相关源码的解读,详细介绍SPI思想在Spring的应用以及如何在项目应用Spring SPI技术。
[AIGC] SpringSPI机制详解
最新发布
程序员三木的博客
04-11 686
SPI (Service Provider Interface)是Java服务提供者接口的缩写,它是Java提供的一种用于被第三方实现或扩展的接口,SPI的作用就是为这些被扩展的API寻找服务实现的过程。SPI本质是面向接口编程思想的具体应用,它降低了模块之间的耦合度,提高了系统的可扩展性。
SPI服务发现机制以及一个简单的demo程序
没有最好的技术。。。
10-31 290
java的spi是一种服务发现机制,很多文章介绍spi机制的时候都会说一句类似spring框架的IOC容器。就作者在实际的工作过程发现没有什么类比性。SPI源语的全称是“Service Provider Interface”,即“服务提供者的接口”,该接口的使用者是服务提供方,谁提供服务谁使用spi接口。该机制的经典使用案例是jdbc框架,一个优秀的基于此框架扩展的是dubbo框架。在作者公司的产品也使用了该框架,主要用于外设集成以及逻辑扩展框架
SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】
Coder_ljw的博客
11-04 1508
SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】因为在SpringBoot的自动装配其实有使用到SPI机制,所以掌握了这部分对于SpringBoot的学习还是很有帮助的。SPI,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC都使用到了SPI机制
SpringBoot源码分析(一)之SPI
zhang_didi的博客
01-26 1447
SpringBoot源码分析(一)之SPI 文章目录SpringBoot源码分析(一)之SPI前言一、SPI项目案例接口项目-Database接口实现1-Mysql接口实现2-Oracle测试demo二、源码分析 前言 在我们研究Spring Boot自动装配之前需要先了解一下SPI机制,因为Spring Boot的自动装配使用到了SPI机制来获取依赖的@Configuration注解的类信息。 SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在依赖
深入学习JavaSPI机制
08-25
主要介绍了深入学习JavaSPI机制,文通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spi_test.rar_SPITest_bravem1d_imx spi_test_spi_spi_test_demo
09-20
用于测试spi 接口的程序,直接./运行即可:./spi test
Java SPI 机制SPI实战+ServiceLoader源码分析+SPI 应用场景+破坏双亲委派)
06-21
Java SPI 机制详解 Java SPI 机制,全称 Service Provider Interface,是 Java 内置的...Java SPI 机制一个强大的服务发现机制,广泛应用于许多框架和库SPI 机制的解耦和可扩展性特点使得程序更加灵活和可维护。
spi_test.rar_DEMO_spi_test_demo
09-14
This is a demo SPI code ...NOT wroking :
Java的Spi使用实例
02-27
javaSpi使用实例,详情请见文章http://blog.csdn.net/evankaka/article/details/58265019
spi_ctrl_demo_spi_DEMO_
10-02
使用vhdl实现spi读取adxl357三轴方向的加速度计值
【spring系列】SPI详解
qq_35789269的博客
12-15 6396
SPI机制
java spi基本demo
xupeng874395012的博客
03-23 613
在项目的配置文件目录下/src/test/resources 创建/META-INF/services 在这个文件夹下创建com.demo.intf.SpiService文件 文件的内容com.demo.intf.impl.SpiServiceImpl 操作完成之后执行下面的测试代码public class PopTest { @Test public void test()
SpringBootSPI 与 spring.factories
sun_tantan的博客
06-06 697
SPI 即 Service Provider Interface。是 JDK 内置的一种服务提供发现机制,为某个接口寻找服务的实现,在模块化设计这个机制很重要。
springbootSPI
昭瑞的专栏
07-28 392
springbootSPI 从java类加载机制说起 参考 java的类加载器负责加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器Bootstrap ClassLoader、Extension ClassLoader和System ClassLoader(Application ClassLoader)每一个类加载器都确定了从哪一些位置加载文件。于此同时我们也可以通过继承java.lang.classloader实现自己的类加载器。 Boo
死磕Spring,什么是SPI机制,对SpringBoot自动装配有什么帮助
m0_46638350的博客
02-25 1875
1. SPI一个机制,流程由三个组件构成ServiceLoader,就是ClassLoader;Service,是接口,作为文件(在META-INF/services目录下)的名称ServiceProvider,是接口的实现类,作为文件(在META-INF/services目录下)的内容2. SPI执行流程ServiceLoader通过classpath路径,加载指定的Service文件,然后使用里面合适的内容ServiceProvider。
Java SPI与Spring SPI全面解析(源码级别讲解)
qq_43599126的博客
01-01 1505
在这个案例里我们就以智能电风扇为例,一般智能电风扇的核心功能有: 开关、摆头、定时、调节档次。假设我们有A、B、C三个不同型号的智能电风扇,但是我们的主要功能是一样的,设想一下,如果不同型号的智能电风扇各写各的接口,那么对接起来是不是很麻烦。那么怎么解决呢?很简单,这个时候就用到了我们的SPI,我先定义一套接口规范,你按照我的接口规范实现,我就能通过某种服务发现机制找到你,使用这种方式的话,后续还有其他型号生产,只要按照这套规范实现,我都能找到。废话不多说,上代码。
springbootspi机制
05-16
Spring Boot SPI(Service Provider Interface)机制是一种标准的 Java 扩展机制,它允许在运行时动态地加载实现某个接口的类。 在 Spring Boot SPI 机制被广泛用于自动配置和插件扩展。通过在类路径下...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 观察者模式实际应用场景-----Spring事件机制 10460
  • 记录锁、间隙锁和临键锁 4119
  • 如何给特殊字符串加索引:如身份证、邮箱等 3684
  • 为何自定义线程工厂(ThreadFactory) 3449
  • 多线程场景下异常回滚 1488

分类专栏

  • 数据结构 3篇
  • Redis 1篇
  • Dubbo 2篇
  • Spring 2篇
  • MySQL 3篇
  • RocketMQ 3篇
  • Zookeeper 2篇
  • Spring Boot 2篇
  • JUC 5篇
  • JVM 4篇
  • Mybatis 3篇
  • JDK 8篇
  • 设计模式 3篇

最新评论

  • 记录锁、间隙锁和临键锁

    AQin1012: 真的假的。。

  • 记录锁、间隙锁和临键锁

    倒过来念的是猪: 图中的范围区间就会被锁住,都是左开右开的区间。~~~~~~应该是左开右闭吧?

  • 记录锁、间隙锁和临键锁

    kakakovic: select * from xx where id > 5 and id < 9 for update 才会加临键锁吧?如果不加行级锁,其他事务插入是成功的~

  • 记录锁、间隙锁和临键锁

    m0_67022177: 上锁的前提应该是当前读吧 你写一个select * from table where id=1是快照读

  • 记录锁、间隙锁和临键锁

    昨天与今天: 经过测试,next-key lock锁住的是一段左闭右开的区别

大家在看

  • 双Token实现登录升级 284
  • python数据分析——数据预处理 8744
  • 求大佬解答
  • 基于Typora、Gitee和picgo搭建图床 897
  • 怀庄之醉和豫腾贸易的关系

最新文章

  • 自定义容器:批处理任务
  • 单例模式总结
  • Redis:慢日志slowlog
2021年4篇
2020年29篇
2019年3篇
2018年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司北海网站搜索优化哪家好阿里百度爱采购哪家好鸡西网站优化按天计费公司汕头企业网站制作玉溪营销网站推荐伊犁英文网站建设公司长春网站建设设计报价秦皇岛高端网站设计价格张北外贸网站设计价格黄南网站seo优化漯河SEO按天计费价格济宁网站建设设计报价桐城百度网站优化哪家好萍乡外贸网站建设报价保定网站建设哪家好中山模板制作公司同乐网页制作哪家好同乐百姓网标王推荐汕尾关键词按天计费哪家好北京外贸网站制作推荐迪庆品牌网站设计多少钱亳州网站搜索优化报价内江网站排名优化推荐曲靖网络推广哪家好常德网页制作公司石岩网站推广系统哪家好毕节品牌网站设计价格泰安品牌网站设计公司滁州建设网站哪家好楚雄百度seo多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化