Spring Boot起步依赖(starter)大大简化了项目构建中的依赖配置,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖,这些依赖项是使项目快速启动和运行所需的依赖项,如spring-boot-starter-web起步依赖,聚合了spring-boot-starter、spring-boot-starter-json、spring-boot-starter-tomcat、spring-web、spring-webmvc等依赖,使得我们的web项目无需引入多个web相关的依赖项以及为了解决版本冲突等问题。
官方starter命名的格式是spring-boot-starter-*,如spring-boot-starter-actuator、spring-boot-starter-web、spring-boot-starter-test等官方starter,平常我们自己定义的starter一般命名格式是thirdProject-spring-boot-starter
- 本文示例代码项目结构是写一个自定义的demo-spring-boot-starter引入两个jar包demo1和demo2,然后在project项目中引入demo-spring-boot-starter,项目结构如图所示:
=============================================================================
(1)pom文件如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns=“http://maven.apache.org/POM/4.0.0”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
com.fiuty
demo1
1.0-SNAPSHOT
(2)demo1只有一个Student类:
@Data
public class Student {
private String name;
private Integer age;
}
===========================================================================
(1)pom文件如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns=“http://maven.apache.org/POM/4.0.0”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
com.fiuty
demo2
1.0-SNAPSHOT
(2)同样,demo2也只有一个类Teacher:
@Data
public class Teacher {
private String name;
private Integer age;
}
================================================================================================
(1)定义starter需要引入spring-boot-starter依赖、spring-boot-autoconfigure依赖以及第三方jar demo1和demo2的依赖,如果需要配置元信息的话,还需引入spring-boot-configuration-processor依赖。 (2)引入demo1和demo2的pom文件:
com.fiuty
demo1
1.0-SNAPSHOT
com.fiuty
demo2
1.0-SNAPSHOT
完整的pom文件如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.4.0
com.fiuty
demo-spring-boot-starter
0.0.1-SNAPSHOT
demo-spring-boot-starter
Demo project for Spring Boot
<java.version>1.8</java.version>
org.springframework.boot
spring-boot-starter
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-autoconfigure
org.springframework.boot
spring-boot-configuration-processor
true
com.fiuty
demo1
1.0-SNAPSHOT
com.fiuty
demo2
1.0-SNAPSHOT
org.springframework.boot
spring-boot-maven-plugin
(3)demo-spring-boot-starter的代码结构如下图所示,有一个AutoConfigure配置类(注入了两个bean,demo1的student和demo2的teacher),还有两个properties配置类用于读取yaml文件的配置值,还有一个配置元信息spring.factories关联两个properties配置类使得写yaml文件时发现配置文件:
- TeacherProperties配置类:
@Configuration
@ConfigurationProperties(prefix = “com.demo2”)
@Data
public class TeacherProperties {
private String name;
private Integer age;
}
- StudentProperties配置类
@ConfigurationProperties(prefix = “com.demo1”)
@Configuration
@Data
public class StudentProperties {
private String name;
private Integer age;
}
- AutoConfigure配置类,将yaml文件的配置值赋值到两个bean,demo1的student和demo2的teacher:
@Configuration
public class AutoConfigure {
@Autowired
private StudentProperties studentProperties;
@Autowired
private TeacherProperties teacherProperties;
@Bean
public Student getStudent() {
Student student = new Student();
student.setName(studentProperties.getName());
student.setAge(studentProperties.getAge());
return student;
}
@Bean
public Teacher getTeacher() {
Teacher teacher = new Teacher();
teacher.setName(teacherProperties.getName());
teacher.setAge(teacherProperties.getAge());
return teacher;
}
}
- META-INF spring.factories配置发现配置文件
Auto Confiure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.fiuty.demo.spring.boot.starter.configure.AutoConfigure
===============================================================================
(1)project项目结构如下,引入自定义starter,在yaml文件配置starter的两个配置类,最后注入demo1的student bean和demo2的teacher bean,获取其name和age的值:
(2)引入自定义的starter的pom文件如下:
com.fiuty
demo-spring-boot-starter
0.0.1-SNAPSHOT
完整的pom文件:
<?xml version="1.0" encoding="UTF-8"?><project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.4.0
com.fiuty
project
0.0.1-SNAPSHOT
project
Demo project for Spring Boot
<java.version>1.8</java.version>
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
com.fiuty
demo-spring-boot-starter
0.0.1-SNAPSHOT
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
(3)代码如下
- DemoController
@RestController
@RequestMapping(“/api”)
public class DemoController {
@Autowired
private DemoService demoService;
@GetMapping(“/student/info”)
public String studentInfo() {
return demoService.studentInfo();
}
@GetMapping(“/teacher/info”)
public String info() {
return demoService.teacherInfo();
}
}
- DemoService
public interface DemoService {
String studentInfo();
String teacherInfo();
}
- DemoServiceImpl
@Service
public class DemoServiceImpl implements DemoService {
@Autowired
private Student student;
@Autowired
private Teacher teacher;
@Override
public String studentInfo() {
return student.getName() + “:” + student.getAge();
}
@Override
public String teacherInfo() {
return teacher.getName() + “:” + teacher.getAge();
}
}
- application.yaml
com:
demo1:
age: 18
name: zhangsan
demo2:
name: lili
age: 25
因为写了发现配置文件spring.factories,故在写yaml文件的时候可以有提示,如下图所示:
- 最后项目跑起来,浏览器访问:
最后
小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你需要这些资料,⬅专栏获取
ot starter起步依赖demo](https://img-blog.csdnimg.cn/img_convert/b66d704ac5b57d48925e77930c764bec.png)
- 最后项目跑起来,浏览器访问:
最后
小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-qdy9wkUL-1719688069701)]
[外链图片转存中…(img-ef3DaOap-1719688069701)]
[外链图片转存中…(img-ESbcWpng-1719688069701)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你需要这些资料,⬅专栏获取