SpringBoot核心--前置内容
创始人
2024-04-19 16:14:11
0

为什么有了Spring还需要SpringBoot?
那是因为Spring的编码需要配置很多模板化的配置,这些配置千篇一律。所以就诞生了SpringBoot,它很多配置都是约定俗称的。因此也有约定优于配置的说法。

在学习SpringBoot的时候碰到的障碍,其实都是Spring的障碍,因为SpringBoot是在Spring的基础上发展起来的。所以我们要排查这些障碍就需要了解Spring的发展过程。

Spring在2004年就出现,知道2014年Springboot才出现。这10年中Spring从纯配置文件到注解的方式是如何一步步变化的呢?下面来分解

Spring V1.0

它是全配置的一种方式来配置一个Application.xml的方式来配置扫描的路径、Bean类等等

Spring V2.0

这是时候出现了注解@Component @Controller 等等 。 通过这个注解可以简化我们Bean的编写方式,不用再配置文件中去配置了。当时这个是好我们的项目还是需要配置项目扫描的路径,因此在2.0的时候还是未能脱离配置文件的方式,只是简化了配置。

Spring V3.0

在3.0阶段可以开始脱离配置文件的方式。因为这个时候提供了一个@Configuration注解。这个注解相当于配置文件。在这个Config类中可以注入我们需要的Bean以及其他。但是这个阶段还是不能完全脱离配置文件,因为我们还是不能清除项目是从哪里开始扫描注解路径的。 因为还是需要借助于配置文件的Contest的compostscan。
这个阶段就是配置类+配置文件混合的一种方式,但是这个阶段提供了一个@import注解来进行过渡。

@Import注解提供了三种用法

  1. @Import一个普通类 spring会将该类加载到spring容器中
  2. @Import一个类,该类实现了ImportBeanDefinitionRegistrar接口,在重写的registerBeanDefinitions方法里面,能拿到BeanDefinitionRegistry bd的注册器,能手工往beanDefinitionMap中注册 beanDefinition
  3. @Import一个类 该类实现了ImportSelector 重写selectImports方法该方法返回了String[]数组的对象,数组里面的类都会注入到spring容器当中
@Import(MyClass.class)
public class ImportConfig {}

下面这两种方式可以实现动态加入的方式。因为我们可以加if…else的方式来加入对应的bean

public class MyImportRegistry implements ImportBeanDefinitionRegistrar{@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {RootBeanDefinition bd = new RootBeanDefinition();bd.setBeanClass(MyClassRegistry.class);registry.registerBeanDefinition("myClassRegistry", bd);}
}
public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[] {MyClassImport.class.getName()};}}

Spring V3.1

这个时候多了一个@ComponentScan注解,用来描述扫描的路径。不指定packages的话,默认是当前包以及子包下的路径。
因此在这个版本spring基本可以脱离配置文件的方式。

Spring V4.0

在这个阶段还提供了一些@Enablexxxx的注解以及@Conditionxxx的注解。第一个注解是将对应的Bean注入到容器中,而@ConditionXXX则是在满足条件的情况下才加入到容器中,否则不加入IOC容器。

Spring V5.0

当我们的Spring项目越来越大的时候,我们需要加快启动的方式,这个时候引入了一个新的注解@index 这个注解的方式需要配合Spring-Contex依赖才能生效,它会生成一个索引文件。用来启动的时候加快大型项目的启动。

总结

上面将的就是Spring的一个发展过程,它的发展其实就是配置全面的向注解的过程。使得我们不再需要配置繁琐的模板化配置的。开发项目更加方便。

SPI接口定义

SPI全称Service Provider Interface,它是JDK内置的一种可以动态发现服务的机制。通过这种方式,可以方便地将服务提供者与第三方实现客户端解耦。它主要包含三个基本组件:服务接口,提供者注册API以及服务访问API。

Java SPI实际上就是“面向接口编程+策略模式+配置文件”组合实现动态加载机制,多用于各种框架中,通过暴露扩展点,实现对框架特定的点进行定制,提升框架灵活性。

步骤

1.定义一个接口

public interface ProgramLanguage {String hello();
}

2.编写实现类

public class Chinese implements Language {@Overridepublic String hello() {return "你好";}
}public class English implements Language {@Overridepublic String hello() {return "Hello";}}

这里其实是两个项目中继承的类的方式来实现,以及编写第三部配置文件的操作。

3.配置文件

创建/resources/META-INF/services,并在services文件夹下创建以接口全限定名称命名的文件,并在文件中写入实现类的全限定名

4.测试

public class App {public static void main(String[] args) {ServiceLoader loader = ServiceLoader.load(Language.class);for (Language language : loader) {System.out.println(language.hello());}}
}

测试的时候引入的类是第二部中项目。


以上是深入了解SpringBoot的一些前置知识,在后续解读SpringBoot项目源码的时候能够一马平川。

相关内容

热门资讯

美国商务部长卢特尼克:特朗普与...   美国商务部长卢特尼克在特朗普与加拿大总理卡尼会晤前接受Fox Business采访。  卢特尼克...
闪回至当年   □张金刚  日子,过着过着,就过成了当年。但在当下,总会时不时偶遇一个触点,带我打开记忆闸门,闪...
特朗普与马斯克“P图”互动但被...   美国白宫4日在社交媒体上发布美国总统特朗普手持光剑的《星球大战》风格AI图片。巧合的是,美国企业...
扬州广陵:广聚英才,激活产业发... 去年以来,扬州市广陵区聚焦“双城双区”战略,坚持产业、科技、人才“一体化”招引,推动科技创新和产业创...
超百万人次游东疆 转自:天津日报  本报讯(记者 马晓冬)5天,超100万人次——这是东疆综保区交出的“五一”假期“成...
一盘水饺背后的女性成长史   由刘伟强执导、马丽领衔主演的五一档新片《水饺皇后》正在全国热映中,票房持续领跑,截至5月5日13...
我的牛仔裤   □荆谦谦  我哥哥大二那年凭借经商的禀赋掘得了人生第一桶金。他把备战高考的我从教室里叫出来,要带...
从车间“倒腾匠”到行业领军工匠   吴双 通讯员 刘瑞雪 济南报道与毫厘较劲的“倒腾匠”  时光倒流至2000年,18岁的王新福背着...
“城市封面”全新亮相 转自:天津日报  本报讯(记者 廖晨霞)“五一”假期,天津津湾广场经过提级改造后全新亮相,以崭新的城...
劳模盖海波的“劳动节” 转自:天津日报  凌晨4时30分,当津城还沉浸在睡梦中,环卫工人盖海波已经完成了班组人员到岗情况核对...
未成年人岂能成为不当牟利的工具 转自:法治日报□ 蒲晓磊  国家网信办近日发布消息称,今年以来,网信部门持续强化未成年人网络保护,根...
上万人在施工,“大机场梦”渐行...   于泊升 济南报道  5月1日下午,一架客机从济南国际机场上空掠过,划出一道白色航迹。刚结束一轮工...
昌平帮青年走稳创业“关键第一步...   本报讯(记者 孙云柯)近日,昌平区试点建设北京青年人才创新创业生态示范区,启动实施了一揽子政策措...
今年西瓜节 来这嗨吃嗨玩 转自:天津日报  “五一”节假期,静海区台头镇中二堡村盘活闲置厂房改成的民宿项目工地上,一派繁忙景象...
入境免签带火山东游,韩国游客纷...   5月4日上午,搭载285名韩国游客的“新香雪兰号”邮轮抵靠烟台港,游客们有序走下舷梯,在烟台开启...
交通运输部门多举措服务保障返程... 转自:法治日报本报北京5月5日讯 记者刘欣 记者今天从交通运输部获悉,“五一”假期第5日,预计全社会...
百年商埠如何续写繁华   文/片 杜春娜 济南报道  五一假期,位于中山公园北门处的济南市开埠博物馆迎来试运行,引起广泛关...
“茶乡警务”护航茶产业发展 转自:法治日报□ 本报记者   吴良艺□ 本报通讯员 蒋  欣  谷雨时节,广西壮族自治区灌阳县黄关...
施工现场来了机器人“工友” 转自:天津日报  “五一”假期,我市道桥维修整治项目施工进度加快推进。市道桥事务中心通过智慧手段赋能...
让“沉睡的资产”焕发新生机 走进黄沙港渔港经济区,一座曾经破落不堪的烂尾楼如今已蝶变为生气盎然、热闹非凡的电商直播基地,创客网红...