一、SpringBoot简介

1、什么是springBoot

  1. springBoot 最最最核心的东西 核心装配
  2. springBoot是伴随Spring4.0的时候发布的一个框架
  3. springBoot来简化Spring应用的开发,约定大于配置,去繁从简,just run就能创建出一个独立的,产品级别的应用
  4. 背景:
    • J2EE笨重的开发,繁多的配置,底下的开发效率,复杂的部署流程,第三方技术集成难度大

      2、解决

  • “spring全家桶”时代
  • Spring-boot -> J2EE一站式解决方案【整合了很多spring技术栈】
  • Spring Cloud ->分布式整体解决方案

3、SpringBoot优点

  • 快速创建独立运行的Spring项目以及主流框架集成【一步完成,十分便捷】
  • 使用嵌入式Servlet容器,应用无需打成war包【开发web应用时,无需达成war包,jar包也行】
  • starters自动依赖于版本控制【自动管理】
  • 大量的自动配置,简化开发,也可修改默认值【不需要写很多的配置文件】
  • 无需配置xml,没有代码生成,开箱即用【没有xml,也不是用代码底层生成的xml,就是不需要配置】
  • 准生产话环境的运行时应用监控【运维使用】
  • 于云计算的天然集成

    4、SpringBoot缺点

  1. SpringBoot是spring的一个再封装,如果不了解spring,那么学Springboot很费劲

二、微服务

1、什么是微服务

  • 微服务就是一种架构风格
  • 一个应用应该是一组小型服务。每一个服务通过http的方式进行互通
  • 每个功能元素最终都是一个可独立替换和独立升级的软件单元

    2、单体应用: ALL IN ONE

  • 以前的架构风格,所有的东西都写在一个应用里面

三、入门(不用这种)

浏览器发送一个hello请求,服务器接收请求并处理,响应Hello World字符串;【典型web应用】

  1. 创建一个maven项目

不需要通过骨架进行创建 【或者一个jar骨架的,因为用的是内嵌的servlet】

  1. 导入Spring-boot相关依赖 ```xml org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE org.springframework.boot spring-boot-starter-web
  1. 3. **编写一个主程序;启动spring-boot应用**
  2. 1. 添加注解 @SpringBootApplication :告诉程序这是一个主程序类,说明这是一个springboot应用
  3. 1. 编写main方法
  4. ```java
  5. @SpringBootApplication
  6. public class HelloWorldApplication {
  7. public static void main(String[] args) {
  8. //spring应用启动起来,传入本类的的class,传入方法的参数
  9. SpringApplication.run(HelloWorldApplication.class,args);
  10. }
  11. }

run()方法必须传入一个类的class,一个被 @SpringBootApplication 注解修饰的类

  1. 编写相关的controller,service

【注意 这的controller和service都要在上面那个main方法包下(也就说controller包是main的兄弟包)】

  1. //控制器
  2. @Controller
  3. public class HelloController {
  4. @RequestMapping("/hello") //映射路径
  5. @ResponseBody //将视图转换为字符串输出到页面上
  6. public String hello(){
  7. return "helloWorld";
  8. }
  9. }
  1. 直接启动main方法
  2. 简化部署

    1. 在pom文件中加入插件
    2. 作用:将应用打包成一个可执行的jar包【无需在服务器安装tomcat 直接有jre环境就能执行】

      1. <build>
      2. <plugins>
      3. <plugin>
      4. <groupId>org.springframework.boot</groupId>
      5. <artifactId>spring-boot-maven-plugin</artifactId>
      6. </plugin>
      7. </plugins>
      8. </build>
    3. 在maven工具里面选择package,然后包就打好了,在target目录下 复制到桌面

    4. 在cmd下 使用cd命令 切换到jar包 所在目录下 使用命令 java -jar spring-boot-hello.jar即可

四、探究HelloWorld,为何这么便捷

1、Spring boot 版本仲裁中心【帮你管理大部分依赖】

在pom中的依赖有一个 parent 【父项目】(父相目一般都是做依赖管理的)

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.9.RELEASE</version>
  5. </parent>

当你点击去会发现,他还依赖另一个父项目

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-dependencies</artifactId>
  4. <version>1.5.9.RELEASE</version>
  5. <relativePath>../../spring-boot-dependencies</relativePath>
  6. </parent>
  1. 在他的父父项目中 有很多的依赖【真正管理Boot应用里面所有的依赖版本】
  2. 也可以叫他为Spring boot版本仲裁中心;
  3. 以后导入依赖默认是不需要写版本的。因为在springboot里面已经规定好了版本号

2、场景启动器

在pom中我们还导入了一个依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  1. 帮我们导入了web模块正常运行所依赖的组件
  2. 可以通过导入别的启动器 实现别的功能 :https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
  3. Spring boot将所有的功能长久都抽取出来,做成一个个starters(启动器) 只需要在项目里面引入这些starters相关场景的所有依赖都会导入进来【要用什么功能,就导入什么场景的启动器】

五、HelloWorld细节

1、主程序代码

  1. //使用@SpringBootApplication注解来标注一个类,说明这是一个SpringBoot应用
  2. @SpringBootApplication
  3. public class HelloWorldApplication {
  4. public static void main(String[] args) {
  5. //spring应用启动起来
  6. SpringApplication.run(HelloWorldApplication.class,args);
  7. }
  8. }

2、@SpringBootApplication注解:

  • springBoot应用
  • 标注在某一个类上
  • 说明这个类是springboot的主配置类
  • 运行这个类的main方法启动springBoot应用**<br />

@SpringBootApplication注解是好多注解的组合 其中有

  • @SpringBootConfiguration :Spring Boot的配置类 【标注在某个类上标识这个是springboot的配置类】
  • @Configuration:spring的配置
    • 配置类 == 配置文件;配置类也是容器中的一个对象@Component创建的

@EnableAutoConfiguration :开启自动配置功能

  • 以前需要配置的东西,现在都不需要配置了,Spring boot帮我们配置;
  • @EnableAutoConfiguration告诉springboot开启自动配置功能;这样自动配置才能生效
  • 它里面有一个@AutoConfigurationPackage 注解:自动配置包的注解

    • @AutoConfigurationPackage里面还有一个@Import({Registrar.class})注解;
    • @Import注解:spring的底层注解,给容器中导入一个组件,导入的组件由AutoConfigurationPackages.Register.class
    • 【将com.yixuex.test下面的所有的包都扫描进去,也就是main方法的父级目录都扫进去了,所以能够扫到controller,所以controller才必须要放在main方法的同级目录中】

    • @Import({Registrar.class})给容器中导入组件[对象]

六、更加快速创建springboot

通过IDEA的创建向导来更快的创建SpringBoot项目
  1. 所有的IDE都支持使用spring Initializer快速创建SpringBoot项目
  2. 选择我们需要的模块,向导会联网创建SpringBoot项目
  3. 这样连 启动方法都帮你写好了
  4. 一般我们都用Rest风格的uri,所以需要在方法上添加@ResponseBody
  5. 但是每个方法都加 就比较麻烦,所以我们直接在控制器类上添加@RestController注解 @RestController = @Controller + @ResponseBody
  6. @ResponseBody 将响应内容写进响应体
  7. 默认生成的Spring-boot项目:
    • 主程序已经生成好了,只需要编写业务逻辑就行
    • 配置文件夹中 【resources 】
      • static:里面保存所有的静态资源 js,css,html,img
      • templates:保存所有的模板页面;(SpringBoot默认是jar包,使用嵌入式的tomcat,默认是不支持JSP的)可以使用模板引擎(freemarker,thymeleaf)
      • application.properties springboot应用的配置文件【端口号…】
        • 可以修改一些默认配置