目录
1.4 什么叫springBoot场景启动器starter(重要)
2.3.1 XxxbootApplication.java解说
2.4.3 添加配置提示启动器configuration-processor
写spring 程序官网推荐使用的的是springBoot,今天就讲一下如果在springBoot进行spring开发,spring boot是一个基础框架,把它spring整个生态粘合在一起,其实springBoot更适合做web开发,挻好用的,后面做springMVC使用spring boot是不错的选择。
一、Spring Boot知识
1.1 springBoot产生背景
长期以来 Java 的开发一直让人所诟病:
·Java 项目开发复杂度极其高;
· Java 项目的维护非常困难;
· 在云时代如何实现项目的快速部署以及快速启动;
· 即便使用了大量的开发框架,发现我们的开发也没少多少;
· 当所有的人认为 Spring 不在前进的时候,Spring 推出了微架构实现的两个重要开发框架:SpringBoot、SpringCloud。
但是如果要想在 Spring 之中整合 RabbitMQ、Kafka、ActiveMQ、MySQL、 Druid、Redis、Shiro,需要编写一堆堆的*.xml 配置文件; 所以在这样的一个大的历史背景下,很多人开始寻求更加简便的开发,而遗憾的是这种简便的开发没有被 JDK 所支持、没有 被 JavaEE 所支持,因为这些只是平台,平台能够提供的只是最原始的技术支持。这一时刻终于由于 Spring 框架的升级而得到了新 生,SpringBoot 的出现,改变了所有 Java 开发的困境,SpringBoot 的最终奉行的宗旨:废除掉所有复杂的开发,废除掉所有的配置文件,让开发变得更简单纯粹,核心:“零配置”。
PS:总的来说它生产的背景就是
J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。
比如前一章《hualinux spring 4.20: 使用MyBatis-Spring操作数据库》,就一个简单的spring结合mybatis就要安装8个jar包,还是算简单的,如果复杂一点的项目要加一堆,还要解决它们之间版本号有没有冲突,大量的配置,要把大量的时间处理这些事上,这样开发是低效的。
Spring Boot来简化Spring应用开发,约定大于配置,去繁从简, just run就能创建一个独立的 ,产品级别的应用
springBoot集合了spring生态—— "Spring全家桶”时代。为什么是说“全家桶”,你看一下springBoot列表下面有一堆其它项目
Spring Boot→J2EE- -站式解决方案
Spring Cloud →分布式整体解决方案
1.2 spring Boot改变什么
Spring Boot 的目标不在于为已解决的问题领域提供新的解决方案,而是为平台带来另一种新的开发体验,从而简化对这些已有技术的使用。
- 使配置变简单
- 使监控变简单
- 使部署变简单
- 使开发变简单
有兴趣可以看《springboot产生背景及介绍》这里就不具体再讲了
1.3 Spring Boot主要特性
- 遵循“约定优于配置”的原则,简化配置
- 可以完全脱离XML配置文件,采用注解配置和java Config
- 内嵌Servlet容器,应用可用jar包执行:java -jar
- 快速完成项目搭建、整合第三方类库,方便易用
- 提供了starter POM, 能够非常方便的进行包管理, 简化包管理配置
- 与Spring cloud天然集成,spring boot是目前java体系内实现微服务最佳方
1.4 什么叫springBoot场景启动器starter(重要)
我们从spring转srpingBoot必须搞懂的概念,就是什么是启动器starter。
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter
相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
所以我们导入插件的时候优先选择用springBoot starter,spring Boot有哪些starter启动器,可以看一下它的官方文档starter,官网没有的,有的也会第三方提供指明是spring Boot使用的依赖,你会看到有starter的字样就是启动器啦。
上面讲的太理论举个例子,我在前一章《hualinux spring 4.20: 使用MyBatis-Spring操作数据库》,就一个简单的spring结合mybatis就要安装8个jar包,如果换成springBoot mybatis的话,会有MyBatis-Spring-Boot-Starter 安装需求的话
java是所有都的都需要的、spring Boot直接选择这个框架就好了、MyBatis-Spring-Boot-Starter包括了MyBatis-Spring,简单地来说你只需要在pom.xml添加 MyBatis-Spring-Boot-Starter 依赖即可!官网也会给出,也可以从maven仓库官网搜索添加
如果只是简单的把几个jar包结合在一起,那你也太小看启动器了,它还配置了帮做了一些默认的配置,能不手动让你写的尽量不让你手动,有些必须得你手工填写的那就没办法了,比如数据库的连接用户名和密码,你不能让它做默认吧?!
如果你想修改默认配置也简单,在resources目录下建立一个配置文件ymal或properties即可。
这样才能体现spring Boot 约定大于配置,去繁从简 的思想
PS:为了更好的管理软件之间的依赖关系,springBoot是要使用构建工具的,如maven、gradle等
1.5 Spring Boot集成第三方类库的步骤
- 通过maven引入springboot-XXXX-starter
- 修改ymal或properties全局统一配置文件
- 加入一个Java Config。这个属于个性化配置,如果使用通用配置,这一步不需要。。
二、通过简单例子讲解怎么使用springBoot
上面讲了一大堆,现在开始创建一个简单的spring Boot,然后为一些注解做一下简单的解释。
2.1 安装前说明
名称 | 版本 | 安装方式 | 备注 |
系统 | win10 | - | 64位,旗舰版 |
jdk | 14.0.1 | exe | java开发工具目前最高最新版本 |
idea | 2020.1 | exe | java最著名的ide工具 |
具体安装见:《hualinux java 1.5:java开发工具idea 2020安装及配置》
2.2 建立一个简单的springBoot项目
如果你之前有建立过项目的话,先关闭项目“File-->Close Project”
PS:
1. Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。
可以自动加上如下注解:
@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter :使用方法同上,区别在于生成的是getter方法。
@ToString :注解在类,添加toString方法。
@EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
@NoArgsConstructor: 注解在类,生成无参的构造方法。
@RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
@Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Slf4j: 注解在类,生成log变量,严格意义来说是常量。2. spring Boot官网最新稳定版本为2.3.1
重启一下spring Boot就行,重启后右下角还提示
这们lombok就可以使用了
2.3 SpringBoot的一些讲解
先删除上面用不到的2个maven相关的文件和一个maven目录,再看一下目录结构,如下图所示:
2.3.1 XxxbootApplication.java解说
1. XxxbootApplication.java的组成格式
上图中 com.hualinux.myspringboot.MyspringbootApplication.java文件,组成是这样的
我们在上面创建springBoot项目的时候 ,第3步需要填写Group、Artifact、Name,上面那个名字就是由
<Group>+<Artifact>+<Name>Application.java
形式组成的,所以就变成了com.hualinux.myspringboot.MyspringbootApplication.java
2. XxxbootApplication.java中的代码解说
@SpringBootApplication:来标注一个主程序类,说明这是一个Spring Boot应用
SpringApplication.run:看字面就知道就是运行
Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
鼠标按住ctrl,点一下@SpringBootApplication注解,会发现有一堆注解
@SpringBootConfiguration:Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类;
@Configuration:配置类上来标注这个注解;配置类 ----- 配置文件;配置类也是容器中的一个组件;
@EnableAutoConfiguration:开启自动配置功能;
以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自
动配置功能;这样自动配置才能生效;
按住ctrl,再点@EnableAutoConfiguration注解进去又会发现有一堆注解
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationImportSelector.class):
AutoConfigurationImportSelector.class:导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
PS:因为XxxbootApplication.java已经包含有main函数,并且是入口程序了,所以要运行就得写在这里类的main函数中
如果我想多个main,等你使用熟悉之后,可以搜索一下springBoot如何多个main,这不是本章要讲的内容
2.3.2 springBoot配置文件
创建springBoot的时候,idea会自动在resources下创建application.properties配置文件。上面说过springBoot的思想是 约定大于配置,去繁从简 已经帮做了一些默认配置,如果想修改配置,可以建立ymal或properties格式的配置文件。
这里我推荐使用.yml,即YAML格式,是主流,所以我把上面的application.properties,改为application.yml
ps:为了让配置文件自动提示功能,建议在pom.xml中添加一个配置文件处理器,以后编写配置就有提示了,
<!-- 文件处理器,以后编写配置就有提示了 --> <!-- 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.3.1.RELEASE</version> </dependency>
2.3.3 测试类XxxApplicationTests
因为maven支持,所以默认也会添加测试XxxApplicationTests,文件名格式是
<Group>+<Artifact>+<Name>ApplicationTests.java,
所以我的是com.hualinux.myspringboot.MyspringbootApplicationTests.java
springBoot2.2.5开始已经默认用junit5了不需要添加相关依赖,只需要添加如入注解 @SpringBootTest ,SpringBoot已经帮我们添加啦,所以什么都不用做,直接用就行了!!!方便吧,到处都体现了 约定大于配置,去繁从简 的springBoot思想
2.4 SpringBoot没写代码前处理小结
结合上面,我们创建springBoot项目之后要做的处理有:
2.4.1 删除maven无用的1个目录2个文件
删除maven相关的1个无用目录和2个文件,如下:
mvn目录、mvnw文件、mvnw.cmd文件
2.4.2 修改配置文件格式为yml(可选)
为了顺应主流,不推荐使用 properties配置文件,而是使用.yml的YAML格式的配置文件,
把resources下的application.properties改为application.yml
2.4.3 添加配置提示启动器configuration-processor
为了提高编写配置文件的速度,少记一些配置文件,所以推荐安装配置启动器configuration-processor,这样当你写配置的时候,会弹出配置提示,配置处理器启动器可以去maven官网仓库搜索 configuration-processor,版本与springBoot版本要一致
如:我的是springBoot 2.3.1 ,所以添加pom.xml配置依赖为:
<!-- 文件处理器,以后编写配置就有提示了 -->
<!-- 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.3.1.RELEASE</version>
</dependency>
2.4.4 最终的springBoot界面
经过上面处理之后,最终的springBoot界面如下:
2.5 编写一个简单的hello
我以本专栏开始《hualinux spring 4.3:idea 2020创建简单的spring注解式(手把手教版)》的hello例子把它以springBoot方式运行。
2.5.1 目录结构
很简单的,我就在在这个基础上添加2个文件即,一个是Hello.java类,一个是配置文件
2.5.2 实现代码
com.hualinux.myspringboot.hello.Hello.java
package com.hualinux.myspringboot.hello;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
@Data
public class Hello {
@Value("阿华")
private String name;
public void sayHello(){
System.out.println("你好,"+name);
}
}
com.hualinux.myspringboot.hello.HelloConf.java
package com.hualinux.myspringboot.hello;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
//因为Hello.java类有注解类,不能直接用new原始方法,可以用导入
//或者使用 @ComponentScan 注解方式
@Import(Hello.class)
public class HelloConf {
}
com.hualinux.myspringboot.MyspringbootApplication,.java
package com.hualinux.myspringboot;
import com.hualinux.myspringboot.hello.Hello;
import com.hualinux.myspringboot.hello.HelloConf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@SpringBootApplication
public class MyspringbootApplication {
public static void main(String[] args) {
SpringApplication.run(MyspringbootApplication.class, args);
AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(HelloConf.class);
Hello hello=ctx.getBean(Hello.class);
System.out.println(hello.getName());
}
}
运行MyspringbootApplication,.java结果为:
PS:不能直接建立另一个类自己写main函数,虽然不会报错,但是不会用到springBoot框架的东西,还是在用spring