SpringBoot(一)入门

SpringBoot是学习尚硅谷的视频,我只是照写,记录笔记,作为自己的复习资料,整个SpringBoot的学习笔记包括:

一、Spring Boot入门
二、Spring Boot配置
三、Spring Boot与日志
四、Spring Boot与Web开发
五、Spring Boot与Docker
六、Spring Boot与数据访问
七、Spring Boot启动配置原理
八、Spring Boot自定义starters
九、Spring Boot与缓存
十、Spring Boot与消息
十一、Spring Boot与检索
十二、Spring Boot与任务
十三、Spring Boot与安全
十四、Spring Boot与分布式
十五、Spring Boot与开发热部署
十六、Spring Boot与监控管理

1、SpringBoot简介

       Spring Boot是用来简化Spring应用开发,约定大于配置(SpringBoot中进行了大量的自动配置),我们可以零配置,很简单的就创建一个企业级的应用。需要明白的是,SpringBoot不是一个新的框架,而是对Spring进行了再次封装,让我们开发更加简单。

       SpringBoot是简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;

       Spring Boot J2EE一站式解决方案,Spring Cloud 分布式整体解决方案。

优点:
       –快速创建独立运行的Spring项目以及与主流框架集成;
       –使用嵌入式的Servlet容器,应用无需打成WAR包;
       –starters自动依赖与版本控制;
       –大量的自动配置,简化开发,也可修改默认值;
       –无需配置XML,无代码生成,开箱即用;
       –准生产环境的运行时应用监控;
       –与云计算的天然集成;

本次学习,环境约束:
       –jdk1.8
       –maven3.x
       –IntelliJ IDEA 2019
       –Spring Boot 1.5.9.RELEASE

2、微服务

微服务:是一种架构风格(服务微化),一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
单体应用:ALL IN ONE
微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;

SpringBoot就是在这样的时代背景下诞生了。

2、SpringBoot的HelloWorld程序

进入IDEA创建项目之前,先要设置好maven,就是指定本地maven,settings文件以及本地maven仓库,具体可以百度;

2.1 maven配置

给maven 的settings.xml配置文件的profiles标签添加:

<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>

同时,为了避免jar包拉不下来,建议在settings.xml中配置下面的华为的镜像仓库:

<mirror>
	   <id>huaweicloud</id>
	   <mirrorOf>*</mirrorOf>
	   <url>https://mirrors.huaweicloud.com/repository/maven/</url>
	</mirror>

2.2 创建工程

2.2.1 新建一个maven工程

File——》New——》Project——》Maven——》选择JDK(同时不要勾选Create from archetype)——》next,

填写完成点击finish即可。

2.2.2 pom.xml文件

 <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>

2.2.3 创建启动类

启动类上要加上 @SpringBootApplication 注解 ,来标注一个主程序类,说明这是一个Spring Boot应用

package com.springboot.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class,args);
    }
}

2.2.4 创建控制器类

       控制器类要放置在启动类的同包或子包下面,这样才能被Spring自动扫描到,同时要加上@Controller注解,注册到Spring的IOC容器:

      处理器方法上,要添加@RequestMapping注解,用来指定映射路径;添加@ResponseBody注解,用来把返回值转成Json返回给浏览器。

package com.springboot.helloworld.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 "Hello 不容易啊";
    }
}

2.3 测试

运行启动类,启动完成,访问:http://localhost:8080/hello,就能看到浏览器上返回了:Hello 不容易啊

2.4 总结

       通过上面简单的几步,我们就创建了一个完整的SpringBoot工程,没有以前那些繁杂的jar包或依赖需要导入,也不用编写任何的配置文件(比如以前需要的web.xml、applicationContext.xml等)。如果要添加其他的功能,只需要在pomx.xml中导入相关模块的starter即可。

2.5 简化部署

在pom.xml中添加下面的坐标:

spring-boot-maven-plugin:这个插件可以将这个应用打成jar包,直接使用java -jar的命令进行执行;

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

加入这个插件之后,reimport后,在右侧,可以执行package,进行打包,把项目打成一个jar包:

然后在屏幕下面点击Terminal,进入命令行终端,相当于就是进入cmd窗口,执行java -jar xxxx.jar命令,也可以运行起来:

      这就是可执行的jar包的意思,那么为什么可以达到这个效果呢?因为SpringBoot内置了tomcat插件,就算没用tomcat服务器,也可以运行起来,这个tomcat可以从导入的jar包中可以看出:

3、SpringBoot的starter和自动配置的简单分析

3.1 starter 场景启动器

在HelloWorld的pom.xml中,首先导入的是一个:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

而他的父项目是
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐dependencies</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath>../../spring‐boot‐dependencies</relativePath>
</parent>
他来真正管理Spring Boot应用里面的所有依赖版本;

       spring-boot-dependencies里面定义了jar包的版本,Spring Boot的版本仲裁中心;以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)

然后就是导入了web模块的starter:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

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

       Spring Boot为我们提供了简化企业级开发绝大多数场景的starter pom(启动器),只要引入了相应场景的starter pom,相关技术的绝大部分配置将会消除(自动配置),从而简化我们开发。业务中我们就会使用到Spring Boot为我们自动配置的bean;

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

       starter类型可以参考:https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#using-boot-starter
这些starters几乎涵盖了javaee所有常用场景,Spring Boot对这些场景依赖的jar也做了严格的测试与版本控制。我们不必担心jar版本合适度问题。
 

3.2 主程序(入口类)

       最重要的是主程序上的注解:@SpringBootApplication:该注解标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;

点击注解,进去查看详细:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {

它上面有三个很重要的注解:

1、@SpringBootConfiguration:Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类,该注解上标注了注解:@Configuration:配置类上来标注这个注解;配置类等同于配置文件;配置类也是容器中的一个组件;@Component

2、@EnableAutoConfiguration:开启自动配置功能;以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;点击查看它的详细:

@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

2.1、@AutoConfigurationPackage:自动配置包

@Import({Registrar.class})
public @interface AutoConfigurationPackage {

2.1.1、@Import(Registrar.class):Spring的底层注解@Import,给容器中导入一个组件;导入的组件由
AutoConfigurationPackages.Registrar.class 将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

3、@Import(EnableAutoConfigurationImportSelector.class)

       EnableAutoConfigurationImportSelector:是导入哪些组件的选择器;将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件; 可以debug查看它父类  AutoConfigurationImportSelector 的方法:selectImports

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);

       Spring Boot在启动的时候从类路径下的  META-INF/spring.factories  中获取 EnableAutoConfiguration 指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;
       J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar;

4、使用Spring的创建向导快速创建一个SpringBoot工程

File ——》new ——》Project:

 

一路next,直到完成即可,会自动创建好工程,结构如下:

主程序已经生成好了,我们只需要我们自己的逻辑
       resources文件夹中目录结构
             static:保存所有的静态资源; js css images;
             templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
             application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值