------springboot 技术入门------

1.springboot 简介:

  优点:

  简化spring 应用开发的一个框架

  整个spring技术栈的一个大整合

------微服务------

  微服务:架构风格

  一个应用时一组小型服务:通过http的方式进行互通

  左侧为单体服务,右侧是微服务

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

  最后类似下面图:神经元,各个节点相互调用,每个功能单元都是完整的功能单元

  

  单体应用:所有东西都写在一个应用上面, ALL IN ONE

  

------环境搭建------

  对maven进行设置 setting.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>

  将maven整合到 idea 中

------spring mvc hello world------

  1.新建一个maven项目

  Enable-auto-import maven自动导入包

  

  2.导入依赖spring boot 包

  https://projects.spring.io/spring-boot/#quick-start spring 官网 快速开始

  pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion> <groupId>com.lixuchun</groupId>
<artifactId>spring-boot-01-helloworld</artifactId>
<version>1.0-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>

  3.编写一个主程序

package com.lixuchun;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* @SpringBootApplication 来标注一个主程序 说明这是一个springboot应用
*
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMainApplication.class,args);
} }

  4.编写一个Controller

package com.lixuchun.com.lixuchun.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "hello world";
}
}

  5.运行开始

可能会报错:端口号占用

  

  进行测试:

  进入到主程序

 

  最后在8080成功运行项目

  出现这个页面 部署成功

  6,部署项目简化,不需要打war包

  创建一个可执行的jar包 https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/

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

  maven插件导入到 pom 中 可以将应用打包成jar包

  左侧蓝框中为打包 package 命令执行后生成的 jar 文件

  可以使用 java -jar adress 启动springboot 项目

  

-----hello world 探究 ------

  pom 文件

  <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>

  pom文件有父项目 点入  spring-boot-starter-parent

    <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>

  其中还有 点入 spring-boot-dependencies

  此pom文件是springboot 所有的版本依赖,此后导入不需要版本,由此文件管理

  

  导入的依赖:

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

  spring-boot-starter-web:

    spring-boot-starter : 场景启动器 帮我们导入web模块正常运行所依赖的jar包,版本受父项目仲裁

    spring boot 将所有场景都抽取出来 做成 starters 需要什么功能导入什么启动器

  场景启动器 : https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#using-boot-starter

  2. 主程序类 主入口类

package com.lixuchun;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller; @SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMainApplication.class,args);
} }

  @SpringBootApplication :spring boot 应用标注在某个类上市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}
)}

  @SpirngbootConfiguration 的配置类:

    标注在某个类上 表示这个是一个springboot 的配置类

      点进 @SpringbootConfiguration(springboot提供)  有 @Configuration(spring 提供):配置类上来标注这个注解

        点进去 @Configuration(spring 提供)  -》 调用 @Component

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

    spring 自己配置东西, springboot 帮助我们自动配置,@EnableAutoConfiguration 告诉springboot 开启配置功能,才能生效

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
  @AutoConfigurationPackage:自动配置包,将主配置类 @springbootApplication注解标注类的所在包以及子包组件扫描到spring容器中
    @Import({AutoConfigurationImportSelector.class})
      
spring底层注解@import 给容器一个组件 导入组件由,AutoCOnfigrationImportSelector 导入哪些组件的选择器,导入组件以
      全类名的方式返回 这些组件添加到容器中
      会给容器中导入非常多的自动配置类(xxxAutoConfiguration):就是给容器中场景导入该场景所有类 如下图绿色部分

  有了此自动装配类 可以免去我们自己编写配置注入功能的组件工作

    protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}

  查看 loadFactoryNames 调用 loadSpringFactories 

  spring boot 在穷的时候在类路径下META-INFO/spring.factories 中取得EnableAutoConfiguration的指定值

  将这些值作为启动参数导入到容器中 自动配置类就生效了 就可以帮助我们进行自动配置工作

  以前需要自己配置的东西 自动配置类都帮助我们配置了

  j2EE 的整体解决方案 都在 下面:

    C:\Users\UPC\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.1.RELEASE\

    spring-boot-autoconfigure-2.0.1.RELEASE.jar

    目录下了

  

springboot 尚桂谷学习总结01的更多相关文章

  1. springboot 尚桂谷学习笔记03

    ------spring boot 与日志------ 日志框架: 市面上的日志框架: jul jcl jboss-logging logback log4j log4j2 ...... 左边一个门面 ...

  2. springboot 尚桂谷学习总结02

    ------向导快速创建Springboot 项目------ 1.使用spring initializer 快速创建一个springboot 项目 选择后 最后点击finsh 向导会联网创建 spr ...

  3. spring boot 尚桂谷学习笔记11 数据访问03 JPA

    整合JPA SpringData 程序数据交互结构图 (springdata jpa 默认使用 hibernate 进行封装) 使用之后就关注于 SpringData 不用再花多经历关注具体各个交互框 ...

  4. spring boot 尚桂谷学习笔记10 数据访问02 mybatis

    数据访问 mybatis 创建一个 springboot 工程,模块选择 sql 中 mysql(数据驱动), jdbc(自动配置数据源), mybatis Web模块中选择 web pom 引入: ...

  5. spring boot 尚桂谷学习笔记09 数据访问

    springboot 与数据库访问 jdbc, mybatis, spring data jpa,  1.jdbc原生访问 新建项目 使用 springboot 快速构建工具 选中 web 组件 sq ...

  6. spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web

    ------配置嵌入式servlet容器------ springboot 默认使用的是嵌入的Servlet(tomcat)容器 问题? 1)如何定制修改Servlet容器的相关配置: 1.修改和se ...

  7. spring boot 尚桂谷学习笔记06 异常处理 ---Web

    ------错误处理机制------ 默认效果 1 返回一个默认的错误页面 浏览器发送请求的请求头:优先接收 text/html 数据 客户端则默认响应json数据 : accept 没有说明返回什么 ...

  8. spring boot 尚桂谷学习笔记05 ---Web

    ------web 开发登录功能------ 修改login.html文件:注意加粗部分为 msg 字符串不为空时候 才进行显示 <!DOCTYPE html> <!-- saved ...

  9. spring boot 尚桂谷学习笔记04 ---Web开始

    ------web开发------ 1.创建spring boot 应用 选中我们需要的模块 2.spring boot 已经默认将这些场景配置好了 @EnableAutoConfiguration ...

随机推荐

  1. Unable to load dynamic library 'zip.so' on Centos 6.8 useing php7.3

    背景: Centos6.8服务器升级php版本,从7.1升级到7.3,常用扩展都安装完成之后,报:Class 'ZipArchive' not found.一看就是zip扩展没有,需要手动安装了. 中 ...

  2. Java-多线程第三篇3种创建的线程方式、线程的生命周期、线程控制、线程同步、线程通信

    1.Java使用Thread类代表线程.     所有的线程对象必须是Thread类或其子类的实例. 当线程继承Thread类时,直接使用this即可获取当前线程,Thread对象的getName() ...

  3. Spring Boot静态资源

    1.4 SpringBoot静态资源 1.4.1 默认静态资源映射 Spring Boot 对静态资源映射提供了默认配置 Spring Boot 默认将 /** 所有访问映射到以下目录: classp ...

  4. Codeforces 1110C (思维+数论)

    题面 传送门 分析 这种数据范围比较大的题最好的方法是先暴力打表找规律 通过打表,可以发现规律如下: 定义\(x=2^{log_2a+1}\) (注意,cf官方题解这里写错了,官方题解中定义\(x=2 ...

  5. [洛谷P1552] [APIO2012]派遣(左偏树)

    这道题是我做的左偏树的入门题,奈何还是看了zsy大佬的题解才能过,唉,我太弱了. 左偏树总结 Part 1 理解题目 很显然,通过管理关系的不断连边,最后连出来的肯定是一棵树,那么不难得出,当一个忍者 ...

  6. Cannot modify header information - headers already sent by出错的原因

    <?php ob_start(); setcookie("username","送家",time()+3600); echo "the user ...

  7. scite配置文件及常用设置

    在linux系统中,SciTE的用户设置文件为 ~/.SciTEUser.properties,优先级高于全局配置文件. scite是个不错的IDE工具,只是本人发现,在开发团队中和其他成员的编辑工具 ...

  8. java 字符串获取

    package java07; /* String 当中与获取相关的常用方法 public int length(); 获取字符串当中含有的字符的个数,得到字符串的长度 public String c ...

  9. SQL回顾1

    1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID,Cname,T ...

  10. ThreadPoolExecutor扩展

    import java.util.concurrent.*; /** * ThreadPoolExecutor扩展 */ public class ExtThreadPool { public sta ...