目录
一、Spring Boot知识
1.1 springBoot产生背景
1.2 spring Boot改变什么
1.3 Spring Boot主要特性
1.4 什么叫springBoot场景启动器starter(重要)
1.5 Spring Boot集成第三方类库的步骤
二、通过简单例子讲解怎么使用springBoot
2.1 安装前说明
2.2 建立一个简单的springBoot项目
2.3 SpringBoot的一些讲解
2.3.1 XxxbootApplication.java解说
2.3.2 springBoot配置文件
2.3.3 测试类XxxApplicationTests
2.4 SpringBoot没写代码前处理小结
2.4.1 删除maven无用的1个目录2个文件
2.4.2 修改配置文件格式为yml(可选)
2.4.3 添加配置提示启动器configuration-processor
2.4.4 最终的springBoot界面
2.5 编写一个简单的hello
2.5.1 目录结构
2.5.2 实现代码
写spring 程序官网推荐使用的的是springBoot,今天就讲一下如果在springBoot进行spring开发,spring boot是一个基础框架,把它spring整个生态粘合在一起,其实springBoot更适合做web开发,挻好用的,后面做springMVC使用spring boot是不错的选择。
长期以来 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 →分布式整体解决方案
Spring Boot 的目标不在于为已解决的问题领域提供新的解决方案,而是为平台带来另一种新的开发体验,从而简化对这些已有技术的使用。
- 使配置变简单
- 使监控变简单
- 使部署变简单
- 使开发变简单
有兴趣可以看《springboot产生背景及介绍》这里就不具体再讲了
- 遵循“约定优于配置”的原则,简化配置
- 可以完全脱离XML配置文件,采用注解配置和java Config
- 内嵌Servlet容器,应用可用jar包执行:java -jar
- 快速完成项目搭建、整合第三方类库,方便易用
- 提供了starter POM, 能够非常方便的进行包管理, 简化包管理配置
- 与Spring cloud天然集成,spring boot是目前java体系内实现微服务最佳方
我们从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等
- 通过maven引入springboot-XXXX-starter
- 修改ymal或properties全局统一配置文件
- 加入一个Java Config。这个属于个性化配置,如果使用通用配置,这一步不需要。。
上面讲了一大堆,现在开始创建一个简单的spring Boot,然后为一些注解做一下简单的解释。
名称 |
版本 |
安装方式 |
备注 |
系统 |
win10 |
- |
64位,旗舰版 |
jdk |
14.0.1 |
exe |
java开发工具目前最高最新版本 |
idea |
2020.1 |
exe |
java最著名的ide工具 |
具体安装见:《hualinux java 1.5:java开发工具idea 2020安装及配置》
如果你之前有建立过项目的话,先关闭项目“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个maven相关的文件和一个maven目录,再看一下目录结构,如下图所示:
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,这不是本章要讲的内容
创建springBoot的时候,idea会自动在resources下创建application.properties配置文件。上面说过springBoot的思想是 约定大于配置,去繁从简 已经帮做了一些默认配置,如果想修改配置,可以建立ymal或properties格式的配置文件。
这里我推荐使用.yml,即YAML格式,是主流,所以我把上面的application.properties,改为application.yml
ps:为了让配置文件自动提示功能,建议在pom.xml中添加一个配置文件处理器,以后编写配置就有提示了,
org.springframework.boot spring-boot-configuration-processor 2.3.1.RELEASE
因为maven支持,所以默认也会添加测试XxxApplicationTests,文件名格式是
<Group>+<Artifact>+<Name>ApplicationTests.java,
所以我的是com.hualinux.myspringboot.MyspringbootApplicationTests.java
springBoot2.2.5开始已经默认用junit5了不需要添加相关依赖,只需要添加如入注解 @SpringBootTest ,SpringBoot已经帮我们添加啦,所以什么都不用做,直接用就行了!!!方便吧,到处都体现了 约定大于配置,去繁从简 的springBoot思想
结合上面,我们创建springBoot项目之后要做的处理有:
删除maven相关的1个无用目录和2个文件,如下:
mvn目录、mvnw文件、mvnw.cmd文件
为了顺应主流,不推荐使用 properties配置文件,而是使用.yml的YAML格式的配置文件,
把resources下的application.properties改为application.yml
为了提高编写配置文件的速度,少记一些配置文件,所以推荐安装配置启动器configuration-processor,这样当你写配置的时候,会弹出配置提示,配置处理器启动器可以去maven官网仓库搜索 configuration-processor,版本与springBoot版本要一致
如:我的是springBoot 2.3.1 ,所以添加pom.xml配置依赖为:
org.springframework.boot
spring-boot-configuration-processor
2.3.1.RELEASE
经过上面处理之后,最终的springBoot界面如下:
我以本专栏开始《hualinux spring 4.3:idea 2020创建简单的spring注解式(手把手教版)》的hello例子把它以springBoot方式运行。
很简单的,我就在在这个基础上添加2个文件即,一个是Hello.java类,一个是配置文件
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