Spring Boot框架解析01
前言:经过博主最近细心研究,直接写代码再来理解原理可能会让人学的东西多一点,其次要记住博文要短小精悍!因此此博文直接上代码。
一、创建Spring Boot自定义Starter项目
博主将代码实现分成5步。
1、创建MAVEN项目并配置依赖。
2、创建xxxproperties类,做配置的属性类。
3、创建xxxAuotConfigre类做配置类。
4、创建xxxservice类做服务类。
5、创建spring.factories文件用来给自动配置类读取目标类信息。
- (1)、创建一个空的maven项目,并加上spring-boot-autoconfigure(此依赖是执行Starter关键依赖,通过此依赖进行创建)
代码:由于篇幅有限此处只展示核心代码。
<dependencies>
<!--自动配置依赖,这个是实现start项目的核心点-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
</dependencies>
- (2)、创建TokenProperties类:
//上面这个注解 是spring注解中的一个通过配置去读数据的注解 ,prefix,代表的是前缀,当你通过,application.properties,去访问这个类的属性时候需要写的是.mayikt.tokenRedisHost
@ConfigurationProperties(prefix = "mayikt")
public class TokenProperties {
//可以给默认的数据,给一个常量
private static final String TOKENREDISHOST="127.0.0.1";
private String tokenRedisHost=TOKENREDISHOST;
private String tokenRedisPwd;
//配置文件中是要遵循驼峰式额 就是没有大写的 。我们现在写的是tokenRedisPwd但是实际上在,我们属性中设置这个属性的值的时候是 token-redis-pwd。这个了 是springboot通过小驼峰进行的替换.
//这里是get,set方法。
public String getTokenRedisHost() {
return tokenRedisHost;
}
public void setTokenRedisHost(String tokenRedisHost) {
this.tokenRedisHost = tokenRedisHost;
}
public String getTokenRedisPwd() {
return tokenRedisPwd;
}
public void setTokenRedisPwd(String tokenRedisPwd) {
this.tokenRedisPwd = tokenRedisPwd;
}
}
- (3)、创建TokenAutoConfiguration类做配置类。
这个类就是当配置类的:
@Configuration//声明为配置类
@EnableConfigurationProperties(TokenProperties.class)//自动配置类加载了配置的属性
@ConditionalOnClass(TokenService.class) //此注解判断TokenService这个类是否在类路径中存在
@ConditionalOnProperty(prefix = "mayikt")
public class TokenAutoConfiguration {
//这个就是 自动配置 类,这个是实现的 关键点 !
@Bean /此处使用configuration和,bean的方式 进行IoC控制。(spring框架解析02有讲过原理,有兴趣的小伙伴可以去看。)
public TokenService tokenService (){
return new TokenService();
}
}
- (4)创建TokenService 类做服务类。
public class TokenService {
@Autowired//自动注入
private TokenProperties tokenProperties;
public String getToken(){
//此代码是模拟token的自动starter
System.out.print("模拟生成了token");
return tokenProperties.getTokenRedisHost()+','+tokenProperties.getTokenRedisPwd();
}
}
- 5、创建spring.factories文件
此文件需要创建在resources的META-INF下面,至于为什么 ?因为SpringBoot默认读取这个文件就是通过这个路径来的。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.demo.TokenAutoConfiguration
#此处的 \是为了 换行也能读取到下面的 配置文件 ,这个文件的作用就是来告诉我们呢的IoC容器,配置文件在哪里。
至此,我们的Starter项目便创建完成!
二、Spring Boot自定义Starter项目的使用
上一章,博主只是讲述如何创建Starter代码,并未讲如何使用,接下来我们将通过一个SpirngBoot项目来调用我们这个Starter。
博主将接下来的步骤分为三个步骤
1、将我们创建的MAVEN依赖打包到本地仓库中去。
2、在新建的SpringBoot的项目中添加我们自定义的Starter依赖。
3、将我们的自动配置包启动并测试。
- (1)、将自定义Starter项目打包导入本地的maven仓库.
命令:mvn clean install
操作:
效果:
- (2)、在新建的SpringBoot的项目中添加我们自定义的Starter依赖.
操作:通过IDEA创建一个新的项目,并添加自定义的Starter依赖。
代码:此POM文件只体现了我们需要的 依赖包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
<!--引入自己编写的 startjar包 .-->
<dependency>
<groupId>com.springboot.demo</groupId>
<artifactId>demo09-teststater</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
- (3)、调用自动配置包启动并测试。
代码实现:
//Spring mvc中的 控制 返回的 是 java代码的 控制
@RestController
@SpringBootApplication
public class Demo10TeststartApplication {
//首先把配置类给拿出来,这个就是老生常谈的问题,自动注入。 .
@Autowired
private TokenService tokenService;
@RequestMapping("/") // 访问的路径 默认 localhost:8080/
public String getToken(){
return tokenService.getToken();
}
public static void main(String[] args) {
SpringApplication.run(Demo10TeststartApplication.class, args);
}
}
- 4 效果
访问效果。
总结
Spring-Boot-Start是实现Spring-Boot快速合并其他框架的重要工具和原理之一。他是通过自动配置 spring-boot-autoconfigure这个依赖包进行自动化配置,从而减轻开发人员模板化的配置。
理解Spring-Boot-Strat会很好的帮助我们理解Spring如何启动项目并如果通过一个SpringBoot项目就可以进行合并其他框架的原理。
我建议小伙伴可以参考本博文进行尝试。
此次博客,博主通过参考蚂蚁课堂以及Spirng Boot实战书籍进行编写本博文。接下来,我在解析框架的同时也会加入一个springCloud电商项目的开发,感兴趣的小伙伴可以关注一波溜了!就这样,溜了,啾咪~~~