写给新手的SpringBoot完整教程——01入门篇

下一篇:写给新手的SpringBoot完整教程——02SpringBoot配置篇

一.SpringBoot简介

SpringBoot是一个集成了Spring技术栈的一个大整合,是一个简化了Spring应用开发的框架,可以一站式解决J2EE的开发流程。

优点:

1.可以快速独立的创建Spring及主流框架集成的项目。
2.使用了嵌入式的Servlet容器,无需生成WAR包
3.我们在使用SpringBoot进行开发时可以使用Starts启动依赖,而SpringBoot会自动地把所需要的其他相关技术jar包导入.
4.大量的自动配置,极大地简化了我们的开发。
5.无需XML文件的大量编写,也不会生成代码,底层是利用SpringBoot写好的API来调用实现,开箱即用
6.SpringBoot也有运维监控项目的功能
7.SpringBoot与云计算的集成

虽然SpirngBoot确实很大程度上简化了我们的开发,但是由于集成度很高,他的底层的实现对我们而言透明度很大,因此如果不对Spring框架了解的比较深入,就很难精通SpringBoot。

二.微服务

微服务起源于2014年由MartinFlower写的一篇文章微服务,这里我们简单介绍一下微服务,现在我们回想一下我们之前没学习微服务之前,我们做的那些项目,其实都是一些单体应用。

所谓单体应用就是指把所有的应用需要的资源放到一个项目里面,即所有的功能都集中在单进程里面,那么可能由于我们的服务器运载能力较差我们就会用多个服务器来跑这一个项目,那么这是就需要把整个项目复制到另外的服务器上。这就是单体应用。

微服务:我们将各个功能模块分割出来为单独的功能元素,那么每个功能放在独立的服务上,那么每一个功能由于独立出来我们在后面进行跨服务器分发这些服务的时候就可以有选择性组合(各功能的组合是通过http来实现的互联),而不需要像单体应用那样复制所有的功能。

在这里插入图片描述

三.环境约束

本系列教程使用到的工具及版本如下:

IntelliJ IDEA 2019.1 x64;
Apache Maven 3.5.2;
jdk:版本为1.8;
SpringBoot:1.5.9

接下来我们需要配置一下Maven:IDEA选择本地Maven配置,否则他会默认选择IDEA内嵌的Maven.下面的配置文件都要勾上Override表示使用我们自己的Maven的配置文件。
在这里插入图片描述
然后在Maven的Settings.xml文件里面配置:(指明我们使用的是jdk1.8)
在这里插入图片描述

<profile>
  <id>jdk-1.8</id>
  <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
  </activation>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  </properties>
</profile>

四.第一个SpringBoot项目——HelloWorld

我们需要实现一个功能:浏览器发送一个hello请求,然后我们返回给浏览器I am Jack.

1.创建Maven工程

在这里插入图片描述
在这里插入图片描述

2.导入SpringBoot的相关依赖

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

3.编写主程序类,并启动应用

在这里插入图片描述

package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 1.创建HelloWorldMainApplication类,并声明这是一个主程序类也是个SpringBoot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    /**
     * 2.编写main方法
     */
    public static void main(String[] args) {
        //3.开始启动主程序类
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

4.创建Controller

在这里插入图片描述

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "I am Jack";
    }
}

5.运行测试

接下来允许main方法,访问:http://localhost:8080/hello;却发现
在这里插入图片描述
我们这里问题在于目录结构除了问题,改为如下:
在这里插入图片描述

在这里插入图片描述

6.简化部署

导入插件

<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次访问:
在这里插入图片描述

五.HelloWorld探究

1.pom文件

I.父项目

在这里插入图片描述

<!--应用的父项目-->
	<parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-parent</artifactId>
	    <version>1.5.9.RELEASE</version>
	</parent>
<!--我们继续追查spring-boot-starter-parent
最后发现最上层的父项目是-->
	<parent>
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-dependencies</artifactId>
	  <version>1.5.9.RELEASE</version>
	  <relativePath>../../spring-boot-dependencies</relativePath>
	</parent>
<!---这才是真正的项目管理者,他指定了所有需要的jar包版本依赖->
II.导入的依赖

在这里插入图片描述
这里的依赖没有指明版本,这是由于在spring-boot-dependencies中都已经指明了版本。具体原理参见

maven子项目引用父项目jar包

spring-boot-starter-web:
spring-boot-starter是spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件.

Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

2.主程序类

@SpringBootApplication

在这里插入图片描述
@SpringBootApplication用来标注应用的主配置类,那么SpringBoot就可以通过启动这个主配置类的main方法来启动SpringBoot应用。
而实际上@SpringBootApplication是一个组合注解,如下:
在这里插入图片描述

I.@SpringBootConfiguration

我们注意到@SpringBootConfiguration他其实也被下面注解所修饰:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration

而这里的@Configuration就是我们Spring的一个配置注解,它可以对应于我们的Spring的配置文件。而配置类@Configuration其实也被@Component修饰,也就是说他也是一个组件。

II.@EnableAutoConfiguration

接下来我们再来看修饰@SpringBootApplication的另外一个注解@EnableAutoConfiguration,我们注意到我们SpringBoot的SpringMVC等居然也是可以使用起来的,这说明这个注解帮助我们把我们以前需要的配置都帮我们自动配置了起来。那么它又是如何实现的呢,我们看@EnableAutoConfiguration由下面注解组合:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)

①我们来看@AutoConfigurationPackage如下:
在这里插入图片描述
我们发现在最后计算的结果是com.jack,也就是我们的主配置类HelloWorldMainApplication.java所在的包,于是@EnableAutoConfiguration的作用就在于将主配置类所在包下面的所有类的注解都可以扫描,于是我们的@Controller等注解为什么可以实现的原因。
@Import(EnableAutoConfigurationImportSelector.class)这个注解
@Import作用在于给容器导入组件。这里就是导入EnableAutoConfigurationImportSelector(自动配置导包选择器)
在这里插入图片描述
其父类:AutoConfigurationImportSelector.class有下面方法:
在这里插入图片描述
我们注意到这个方法的返回值是字符串数组,这个字符串数组返回的是需要导入的其它所有组件的全类名,这些组件就会被放到容器中,而实际上这些组件都是自动配置类(xxxAutoConfiguration),这些组件都是SpringBoot应用启动使用所需要时帮我们自动配置。如下:
在这里插入图片描述
configurations是通过下面这个方法来的:

/*该方法实际上是读取spring-boot-autoconfigure-1.5.9.RELEASE.jar
/META-INF/maven/spring.factories里面读取指定的配置类,见下图
*/
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());

在这里插入图片描述

六.使用Spring Initializer快速创建Spring Boot项目

该方法是向导创建,需要联网才可以使用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建好后得到的目录结构如下(红框内容可以删除):
在这里插入图片描述

接下来我们需要说明一下resources目录结构:

static:放置静态资源如js,css,image等内容
templates:放置模板引擎(SpringBoot默认不支持Jsp),如freemarker,
		  thymeleaf(官方推荐)
application.properties:Spring Boot应用的配置文件;可以修改一些默认设置,
如写server.port=8081(指定端口号为8081,SpringBoot默认是8080)

下一篇:写给新手的SpringBoot完整教程——02SpringBoot配置篇

  • 101
    点赞
  • 318
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值