文章目录

    • 1. Spring简介
    • 2. Spring Boot介绍
      • Spring Boot的核心功能概述
    • 3. SpringBoot搭建快速入门程序
      • SpringBoot的三种启动方式
    • 4. Spring Boot 原理分析
      • 起步依赖
      • Spring Boot配置文件
      • yml(yaml)配置文件介绍
    • 5. SpringBoot常用注解

1. Spring简介

Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的全栈,轻量级代替品。无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级Java 开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能。

Spring核心是IOC和AOP,依赖注入和面向切面编程(事务、日志管理、权限、性能测试)

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的

各种XML配置,像applicationContext-dao.xmlapplicationContext-tx.xmlspringmvc.XML等等配置非常的繁琐。
而且项目的依赖管理也是一件耗时耗力的事情,特别是要十分注意版本兼容问题,pom.XML比较大。
决定项目里要用哪些库就已经是一件很麻烦的事情了,还要知道这些库的哪个版本和其他库不会有冲突问题。添加依赖不是写应用程序代码,一旦选错了依赖的版本,随之而来的不兼容问题毫无疑非常的难以排错和解决。

2. Spring Boot介绍

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程

SpirngBoot特点(优势)

  1. Spring Boot 简化了基于Spring的应用开发,只需要Run运行就能创建一个独立的、生产级别的Spring应用。
  2. 能够更快的入门体验(开箱即用)
    Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置),我们就可以简单的开始编写核心业务。
  3. 无需xml配置,同时也可以修改默认值(基于约定由于配置的思想
    多数Spring Boot应用只需要很少的Spring配置
  4. 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器等。
  5. Spring Boot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。
  6. 可以使用SpringBoot创建java应用,并使用java-jar的方式启动它,或者采用传统的war部署方式

Spring Boot的核心功能概述

  1. 起步依赖
    起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
  2. 自动配置
    Spring Boot的自动配置是一个运行时的过程,在应用程序启动时,自动加载默认配置,判断是否满足需求。如果满足,则不需要额外配置,否则加载额外配置。
  3. 使用依赖传递(子类继承父类,自动拥有父类的所有)

3. SpringBoot搭建快速入门程序

  1. 选择springboot初始化工具创建项目
    new - > project -> Spring Initializr

  2. 设置包名,工程名
    3. 选择依赖(我这里选择创建web工程)


    创建成功

  3. 写一个controller进行跳转测试

springboot将依赖,配置都承包了,开发者只要写三层架构的代码,实现业务功能就行。

@RestController注解:其实就是将之前的@Controller和@ResponseBody注解加在一起,返回json数据

@RestController
public class TestController {
	//@RestController注解:其实就是将之前的@Controller和@ResponseBody注解加在一起,返回json数据
    @RequestMapping("test")
    public String testGet(){
        return "Hello SpringBoot TestController";
    }
}
  1. 启动SpringBoot访问controller

SpringBoot内置了tomcat服务器,我们不需要配置tomcat。

通过Application的main方法直接启动

启动成功

通过地址访问controller测试

SpringBoot的三种启动方式

  1. 直接运行项目的Application的main进行启动(就是上面那种方式)【开发使用】
  2. 通过Maven启动【开发使用】
    在控制台Terminal输入mvn spring-boot:run回车,当看到springboot的logo出现,并加载了项目的控制器等类之后,就是启动成功了。
  3. mvn install编译生成出项目的jar,然后运行jar。【部署使用】

使用mvn install进行编译生成jar包springboot-0.0.1-SNAPSHOT.jar,这个jar包名称是你的项目名称-版本号(Version)
然后打开PowerShell窗口,通过命令java - jar .\springboot-0.0.1-SNAPSHOT.jar金运行就行(jar名称得是你自己的)

4. Spring Boot 原理分析

创建SpringBoot之后的默认pom.xml配置。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache/POM/4.0.0" xmlns:xsi="http://www.w3/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache/POM/4.0.0 https://maven.apache/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xgf</groupId>
    <artifactId>springboot01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot01</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

起步依赖

起步依赖,就是对功能进行一个打包,使我们在新建SpringBoot项目时,不用再去配置很多pom文件中依赖。
SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置。起步依赖的作用就是进行依赖的传递。

spring-boot-starter-parent包自动帮我们引入了web模块开发需要的相关jar包。(相当于SpringBoot的父级)
mybatis-spring-boot-starter帮我们引入了dao开发相关的jar包。
spring-boot-starter-xxx是官方提供的starter,xxx-spring-boot-starter是第三方提供的starter。
这些文件打开之后,没有任何源码,只有一个pom文件,它的作用就是引入了相关jar包。

SpringBoot打包插件
spring-boot-maven-plugin,maven的打包插件,用于做微服务,分布式,内部包含了tomcat服务器。

Spring Boot配置文件

SpringBoot是基于约定的,所以很多配置都有默认值。
想使用自己的配置替换默认配置,就需要使用配置文件了。(此文件用于覆盖Spring Boot的默认配置)
SpringBoot配置文件有两种:

1)application.properties
2)application.yml(application.yaml)
SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件
主配置文件推荐使用yml,但是yml除了主配置,其它配置不生效。

application.properties案例

#服务器端口号,会覆盖前面继承的端口号8080
server.port=8080

# DataBase Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
spring.datasource.username=root
spring.datasource.password=root

yml(yaml)配置文件介绍

yml文件格式是YAML (YAML Aint Markup Language)编写的文件格式。

yml文件有这些特点:

1)yaml是一种直观的能够被电脑识别的的数据数据序列化格式。
2)容易被人类阅读。
3)可以被支持yaml库的不同的编程语言程序导入。
4)yml文件是以数据为核心的,比传统的xml方式更加简洁。

application.yml案例

server:
  port: 8080
  servlet:
    context-path: "/web01"

5. SpringBoot常用注解

SpringBoot注解描述
@SpringBootApplication主配置类。用于声明这个类就是SpringBoot的主配置类,SpringBoot通过运行主配置类的main方法执行程序。
@SpringBootConfiguration是一个Spring配置注解(继承@Configuration),将当前类声明的一个或多个**@Bean**注解标记的方法纳入Spring容器管理,实例名就是方法名。
@EnableAutoConfiguration自动装配,用于自动配置starter中的信息,实现自动化装配。根据添加的jar包来配置项目的默认配置。
@ComponentScan包扫描,用于扫描指定位置下的所有的Spring相关注解(@Component@Controller@Service@Repository
@Bean用在方法上,取代xml中的标签创建对象使用
@Configuration用在类上,声明当前类是一个配置文件(代替Spring配置文件)
@RestController@RestController == @ResponseBody + @Controller,就是将当前类标记为Controller并且类下的所有方法返回json数据。
@ConfigurationProperties配置属性绑定,把全局/主配置的yml/properties的配置信息注入到POJO中,这个注解的使用需要把当前类标记为组件(添加注解@Component),可以添加属性prefix = 'xxx',这个xxx指的是yml/properties的key。
@PropertySource引入SpringBoot配置,当@ConfigurationProperties需要从副配置文件拿数据时,可以用@PropertySource手动引入副配置,value可指定多个路径
@ImportSource引入Spring配置。引入Xxx.xml的Spring配置文件,需要在主类配置该注解用于导入多个配置文件。@ImportResource(locations = {"classpath:Xxx.xml"})
@Param用于绑定参数,EL表达式
@PathVariable用于取url中的值


  1. SpringBootApplication

@SpringBootApplication继承@``SpringBootConfiguration@EnableAutoConfiguration@ComponentScan`,这是它的部分源码

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
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}
  1. RestController
@Controller
@ResponseBody
public @interface RestController {
}
  1. @ConfigurationProperties
public @interface ConfigurationProperties {
    @AliasFor("prefix")
    String value() default "";

    @AliasFor("value")
    String prefix() default "";

    boolean ignoreInvalidFields() default false;

    boolean ignoreUnknownFields() default true;
}
  1. @ConfigurationProperties的使用
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    String name;
    int age;
    double money;
}

在yml中配置属性值:

person:
	name = 'strive_day'
	age = 21
	money = 0.0

pom.xml配置yml依赖处理器

<!-- 配置yml依赖处理器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

  1. @PathVariable
@RequestMapping("/user/{userId}")
public void getUserId(@PathVariable("userId") String userId){}

更多推荐

【SpringBoot 01】SpringBoot入门介绍,搭建运行一个SpringBoot小程序,SpringBoot常用注解