A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 余大麻 于 2019-8-1 14:40 编辑

1. SpringBoot 入门A. SpringBoot 简介
  • SpringBoot 是 2014 年伴随 Spring4.0 开发出来的一个框架
    • SpringBoot 可以帮助我们简单快捷的进行产品级别的开发
  • SpringBoot 核心思想:【约定大于配置】
    • SpringBoot 帮我们自动配置好与其他框架的整合与相关环境的兼容
  • 使用嵌入式的 Servlet 容器,应用无需打包成 war
  • SpringBoot 缺点:入门容易,精通难
B. 微服务
  • 2014 年 martin fowler 提出的一种架构风格
  • 一个应用应该是一组小型服务,可以通过 http 的方式进行交互
    • 每一个功能元素都是一个可独立替换和独立升级的软件单元
    • 但是这样子导致部署和运维比较复杂

B. maven 配置
  • 给maven 的 settings.xml 配置文件的 profiles 标签添加
[XML] 纯文本查看 复制代码
<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>


C. HelloWorld 入门案例
  • 浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串
  • 创建一个 jar 的 maven 工程
  • 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>

编写一个主程序;启动Spring Boot应用
  • 用于启动 SpringBoot 应用
[Java] 纯文本查看 复制代码
package com.study.springboot;

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

/**
 * @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApp {
    public static void main(String[] args) {
        // 把 SpringBoot 启动起来
        SpringApplication.run(HelloWorldMainApp.class,args);
    }
}

编写 Controller
  • 接收浏览器的请求
[Java] 纯文本查看 复制代码
package com.study.springboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String sayHello() {
        return "HelloWorld!";
    }
}

  • 测试
    • 运行主程序的 main 方法即可访问
  • 简化部署
    • 打包之后使用: java -jar Xxxx.jar 即可运行
    • 自带 tomcat 环境

[XML] 纯文本查看 复制代码
<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

D. HelloWorld 案例研究
  • pom 文件
  • 父项目
    • 所有 SpringBoot starter 的父项目
    • 做依赖管理
    • SpringBoot 的版本控制中心,所有的版本都写好的
      • 如果没有在 dependences 中管理的依赖要自己手动指定版本


[XML] 纯文本查看 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

<!-- 父项目的父项目 -->
<!-- 它来真正管理Spring Boot应用里面的所有依赖版本 -->
<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-starter
    • 表示要导入 springboot 的场景启动器
  • web
    • 导入 web 应用相关的【依赖】
  • Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器)
    • 只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来
    • 要用什么功能就导入什么场景的启动器

[XML] 纯文本查看 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

E. SpringBoot 的主程序类细节
  • @SpringBootApplication: SpringBoot 的主程序类
    • SpringBoot 应用标注在某个类上说明这个类是 SpringBoot 的主配置类
    • SpringBoot 就应该运行这个类的 main 方法来启动 SpringBoot 应用

[Java] 纯文本查看 复制代码
@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 {
    .....
}

  • @SpringBootConfiguration: 表示该类是一个配置类
    • 表示这个类是一个配置类
      • @Configuration: Spring 最底层的注解
        • 配置类下配置这个注解
        • 相当于配置文件
          • @Component: 配置类也是 Spring 的一个组件



  • @EnableAutoConfiguration: =加载配置项
    • @AutoConfigurationPackage: 自动配置包
      • @Import(AutoConfigurationPackages.Registrar.class): Spring 底层注解
        • 给容器中导入组件
        • 由导入的组件提供配置
      • 导入我们主程序下的配置
    • @Import(EnableAutoConfigurationImportSelector.class): 导入哪些组件的选择器
      • 将所有需要导入的组件以全类名的方式返回, 这些组件就会添加到容器中
      • 导入自动配置类
        • 导入这个场景需要用到的组件和设置好配置
      • 有了自动配置类,免去了我们手动编写配置注入功能组件等的工作
        • 从类路径下获取 META-INF/spring.factories 中 EnableAutoConfiguration指定的值
          • 里面就有默认的配置信息




2. 使用 Spring Initializer 快速创建 Spring Boot 项目
  • 根据提示就可以快速创建一个 SpringBoot 项目
A. 默认 SpringBoot 的项目结构
[XML] 纯文本查看 复制代码
resources
    |___> satic : 保存所有的静态资源
    |___> templates: 保存所有的模板页面(默认是jar包,使用嵌入tomcat,默认是不支持 jsp 的,可以使用模板引擎)
    |___> application.properties : 应用的配置文件

B. 配置文件
  • SpringBoot 有 2 种配置文件(配置文件名是固定的)
    • application.properties
    • application.yml
      • 以数据为中心,同样的配置


  • 表示字面量
    • k: v:字面直接来写
      • "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
        • 特殊字符会转义
      • '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
        • 原样输出


  • 对象
    • k: v:在下一行来写对象的属性和值的关系;注意缩进
    • 对象还是k: v的方式

[XML] 纯文本查看 复制代码
friends:
    lastName: zhangsan
    age: 20

[XML] 纯文本查看 复制代码
friends: {lastName:"zhagnsan", age: 23}

数组
  • 用- 值表示数组中的一个元素
[XML] 纯文本查看 复制代码
pets:
    - cat[mw_shl_code=java,true]@NoArgsConstructor
@ToString
@Data
public class Dog {
    private String name;
    private Integer age;
}
@NoArgsConstructor
@ToString
@Data
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birthday;

    private Map<Object, Object> maps;
    private List<Object> lists;
    private Dog dog;
}

    - pig
    - dog[/mw_shl_code]
[XHTML] 纯文本查看 复制代码
pets: ["cat", "dog", "pig"]

C. 取值
[Java] 纯文本查看 复制代码
@NoArgsConstructor
@ToString
@Data
public class Dog {
    private String name;
    private Integer age;
}

[Java] 纯文本查看 复制代码
@NoArgsConstructor
@ToString
@Data
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birthday;

    private Map<Object, Object> maps;
    private List<Object> lists;
    private Dog dog;
}


. properties 配置文件的编码问题
  • properties 的写法和 yml 的写法相似
  • 配置文件中如果值为中文时会出现乱码
    • idea 默认使用 utf-8 进行编码的
    • 把文件的编码设置成 utf-8

















0 个回复

您需要登录后才可以回帖 登录 | 加入黑马