作为了一个小菜鸡,真诚发问,sdk和starter有啥差异哇,欢迎咱们谈论区告知!非常感谢
springboot
作为java开发者不得不提的一个框架,其中也是有许多装备能够减轻开发者的工作量。
简化了Bean目标注入到IoC容器中的流程(主动安装),装备文件的统一管理。
比方主动安装,引进一个starter就能够实现了,大大减少了代码量,使得coder专心于事务代码。
主动安装原理
首先你需求去熟悉SPI机制
具体的逻辑就不展示了,这儿只展现关键代码。假如需求具体发动逻辑代码的同学谈论走一波,需求多的话就更新。
springboot主动安装的流程
便是跟着A项目的发动,会扫描到@SpringBootApplication
注解
该注解里边存在一个@EnableAutoConfiguration
注解
在EnableAutoConfiguration
注解里边又存在一个Import
注解
执行selectImports
办法,selectImports
返回的是装备类的全路径名
装备类从何而来,是根据SPI机制,去classpath下的META-INF
目录下找一切的spring.factories
文件,然后将一切的spring.factories文件进行解析
主动将我所需求的Bean目标注入到IoC容器里边去,@Configuration
和@Bean
,主动体现在我没有对任何类加前面的两个注解
手写一个starter
1.咱们先新建一个springboot项目,这儿的application.properties和Application发动类都是不需求的
2.界说一个简单的Boy类
/**
* @author suncong
* @Date 2023/2/3 17:24
*/
public class Boy{
public static Boy create(String name){
return new Boy(name);
}
private String name;
public Boy(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String say(){
return name+",Hello World!";
}
}
3.界说主动装备类
/**
* @author suncong
* @Date 2023/2/3 17:26
*/
@ConditionalOnClass(Boy.class) // 加载到Boy这个类的话,就主动安装
@EnableConfigurationProperties(BoyProperties.class)
@Configuration
@Data
@ComponentScan
public class BoyAutoConfiguration {
/**
* 将目标交给IOC管理
* @param boyProperties
* @return
*/
@Bean
Boy boy(BoyProperties boyProperties){
return new Boy(boyProperties.getName());
}
}
4.界说ConfigurationProperties
类,从装备文件(引证这个starter的项目的装备文件)中读取装备
/**
* @author suncong
* @Date 2023/2/3 17:28
*/
@ConfigurationProperties(prefix = "demo.boy")
public class BoyProperties {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
5.META-INF文件
注意这儿的每个包名都要正确!!
比方META_INF
和spring,factories
便是错的(别问我怎样知道的…)
additional-spring-configuration-metadata.json
这个文件可写可不写,主要是界说装备信息的内容(指定demo.boy.name有必要是String类型)
{
"properties": [
{
"name": "demo.boy.name",
"type":"java.lang.String",
"description": "想跳舞的人",
"defaultValue": "sc"
}
]
}
spring.factories
这个文件有必要写,装备主动安装的类的路径
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sc.demo.BoyAutoConfiguration
6.打包
这样的话,本地的maven库房就有了这个jar包(后续能够上传库房或许直接发jar给别人用)
7.再新建一个springboot项目
界说发动类和装备类
/**
* @author SunCong
*/
@RestController
@SpringBootApplication
public class Demo1Application {
public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
}
@Autowired
private com.sc.demo.Boy boy;
@GetMapping("/say")
public String say(){
return boy.say();
}
}
application.properties:
# 使用称号
spring.application.name=demo1
server.port=8081
demo.boy.name="scscsc"
pom.xml:
<dependency>
<groupId>com.sc</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
8.测验
咱们也能够修改装备文件
# 使用称号
spring.application.name=demo1
server.port=8081
demo.boy.name="shuaige"
搞定!!!
两类starter的差异
咱们注意到有这么两个starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
一个是xxx-starter, 一个是stater-xxx
差异: 1.starter命名规矩不一样(如上) 2.xxx-starter是第三方的,主动装备类在
starter-xxx是官方的,主动装备类在
最终,感谢您的观看!欢迎点赞 重视,谈论出本文的不足之处