springboot入门

文章目录

  • springboot入门
    • 1.spring boot简介
    • 2.微服务
    • 3.环境搭建
      • 1.maven配置
      • 2.sprintboot HelloWord
        • 1.创建一个maven工程(jar)
        • 2.导入spring boot相关依赖
        • 3.编写主程序,启动springboot应用
        • 4.编写相关的controller service等
        • 5.运行主程序
        • 6.简化部署,不需要打war包,直接导入插件
    • 4.Hello World探究
      • 1.pom文件
        • 1.父项目
        • 2.启动器
      • 2.主程序类,主入口类
    • 5. 使用Spring Initializer快速创建Spring Boot项目
      • 1、IDEA:使用 Spring Initializer快速创建项目
      • 2、STS使用 Spring Starter Project快速创建项目
  • 2.springboot的配置
    • 1.配置文件
    • 2.yml语法
      • 1.基本语法
      • 2.值的写法
        • 字面量:普通的值(数字、字符串、布尔)
        • 对象、Map(属性和值)(键值对)
        • 数组(List、Set)
      • 3.配置文件值注入

springboot入门

1.spring boot简介

简化Spring应用开发的一个框架;

整个Spring技术栈的一个大整合;

J2EE开发的一站式解决方案;

2.微服务

微服务:架构风格(服务微化)

一个应用应该是一组小型服务:可以通过HTTP的方式进行沟通;

每个功能元素最终都是一个可独立替换和独立升级的软件单元:

3.环境搭建

1.maven配置

给maven的setting.xml添加以下内容:

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

2.sprintboot HelloWord

一个功能

浏览器发送hello请求,服务器接受请求并处理,响应Hello Word 字符串

1.创建一个maven工程(jar)

2.导入spring boot相关依赖

 <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>1.5.9.RELEASEversion>
    parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>

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

/**
 * @author 单岱印
 * @date 2020/3/30
 * @描述
 *   标注一个主程序类,说明是一个spring boot应用
 */
@SpringBootApplication
public class HelloWordMainApplication {

    public static void main(String[] args) {
        /**
         *@创建人 单岱印
         *@创建时间 2020/3/30
         *@描述
         *   spring应用启动起来
         *@修改人和其它信息
         */

        SpringApplication.run(HelloWordMainApplication.class,args);
    }
}

4.编写相关的controller service等

  • 不需要配置包扫描或者视图解析器等,直接运行main方法
@Controller
public class HelloController {

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

5.运行主程序

6.简化部署,不需要打war包,直接导入插件

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

将这个应用打成jar包,直接使用java -jar的命令进行执行;

4.Hello World探究

1.pom文件

1.父项目

<parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>1.5.9.RELEASEversion>
parent>

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

Spring Boot的版本仲裁中心;

以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)

2.启动器

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

spring-boot-starter-web:

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

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

2.主程序类,主入口类

配置底层原理

/**
 * @author 单岱印
 * @date 2020/3/30
 * @描述
 *   标注一个主程序类,说明是一个spring boot应用
 */
@SpringBootApplication
public class HelloWordMainApplication {

    public static void main(String[] args) {
        /**
         *@创建人 单岱印
         *@创建时间 2020/3/30
         *@描述
         *   spring应用启动起来
         *@修改人和其它信息
         */

        SpringApplication.run(HelloWordMainApplication.class,args);
    }
}

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

@SpringBootConfiguration:Spring Boot的配置类;

标注在某个类上,表示这是一个Spring Boot的配置类;

@Configuration:配置类上来标注这个注解;

配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component

@EnableAutoConfiguration:开启自动配置功能;

以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;

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

@AutoConfigurationPackage:自动配置包

@Import(AutoConfigurationPackages.Registrar.class):

Spring的底层注解@Import,给容器中导入一个组件;导入的组件AutoConfigurationPackages.Registrar.class;

将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

@Import(EnableAutoConfigurationImportSelector.class);

给容器中导入组件?

EnableAutoConfigurationImportSelector:导入哪些组件的选择器;

将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;

会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jx9Oyvry-1586788418221)(E:\假期学习\暑假\spring boot\代码\截图\捕获.PNG)]

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;

SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);

==Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;==以前我们需要自己配置的东西,自动配置类都帮我们;

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar;

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

1、IDEA:使用 Spring Initializer快速创建项目

IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;

选择我们需要的模块;向导会联网创建Spring Boot项目;

自动生成的pom.xml文件可能会报错,使用下面文件


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.atguigugroupId>
    <artifactId>spring-boot-01-helloworld-quickartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>spring-boot-01-helloworld-quickname>
    <description>Demo project for Spring Bootdescription>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>1.5.9.RELEASEversion>
        <relativePath/> 
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

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


project>


默认生成的Spring Boot项目;

  • 主程序已经生成好了,我们只需要我们自己的逻辑

    /**
     * @author 单岱印
     * @date 2020/3/30
     * @描述
     *    这个类所有方法中返回的数据直接写给浏览器(如果是对象,转为json数据)
     */
    //@ResponseBody
    //@Controller
    @RestController
    public class HelloController {
    
        @RequestMapping("/hello")
        public String hello(){
            return "Hello World";
        }
        //RESTAPI的方式:发一个请求,将数据交给浏览器
    }
    
    
  • resources文件夹中目录结构

    • static:保存所有的静态资源; js css images(访问引入资源);

    • templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);

    • application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;

      例如:修改服务器端口号 server.port=8081

2、STS使用 Spring Starter Project快速创建项目


2.springboot的配置

1.配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

•application.properties

•application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

YAML(YAML Ain’t Markup Language)

YAML A Markup Language:是一个标记语言

YAML isn’t Markup Language:不是一个标记语言;

标记语言:

​ 以前的配置文件;大多都使用的是 xxxx.xml文件;

​ YAML:以数据为中心,比json、xml等更适合做配置文件;

​ YAML:配置例子

server:
  port: 80

XML

<server>
    <port>80port>
server>

2.yml语法

1.基本语法

k:(空格)v:表示一对键值对(空格必须有);

空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:
    port: 8081
    path: /hello

熟悉和值也是大小写敏感

2.值的写法

字面量:普通的值(数字、字符串、布尔)

字符串默认不用加上单引号或者双引号;

​ “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

​ name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

​ ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

​ name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值)(键值对)

k: 

​ v:在下一行来写对象的属性和值的关系;注意缩进

​ 对象还是k:

​ v的方式

friends:
    lastName: 张三

行内写法:

friends: {lastName: zhangsan,age: 18}

数组(List、Set)

用- 值表示数组中的一个元素

pets:
   - cat
   - dog
   - pig

行内写法

pets: [cat,dog,pig]

3.配置文件值注入

配置文件

Person:
     lastName: 张三
     age: 21
     boss: false
     brith: 2020/3/30
     map: {k1: v1,k2: v2}
     list:
      - 单岱印
      - 黄钦
      dog:
        name: 小狗
        age: 2

javaBean

/**
 * @author 单岱印
 * @date 2020/3/30
 * @描述
 *  将配置文件中配置的每一个属性的值,映射到这个组件中
 *   @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *       prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 *  只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *
 */
@Component
@ConfigurationProperties(prefix = "Person")
public class Person {

    private String lastName;
    private int age;
    private boolean boss;
    private Date birth;
    private Map<String,Object> map;
    private List<Object> list;
    private Dog dog;

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isBoss() {
        return boss;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }


    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", map=" + map +
                ", list=" + list +
                ", dog=" + dog +
                '}';
    }
}


我们可以导入配置文件处理器,以后编写配置就有提示了


		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-configuration-processorartifactId>
			<optional>trueoptional>
		dependency>

。。。。。。持续更新中

你可能感兴趣的:(springboot入门)