1、环境配置:

Java 8 & 兼容java14 .
●Maven 3.3+
●idea 2019.1.2

maven的settings.xml配置

<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors> <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>
</profiles>

  

2、写一个HelloWorld项目

需求:浏览发送/hello请求,浏览器响应 Hello,Spring Boot 2

https://www.cnblogs.com/Kaelthas/p/17056262.html

2.1、SpringBoot的三大特性:依赖管理+自动配置+运行原理

2.1.1、基于父项目的 依赖管理

通过引入父项目,无需指定依赖的版本号,自动版本仲裁。但如果想引入特定版本,需要<properties>下的<XXX.version>标签

  <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>   //屏蔽父依赖,引入自己版本的 mysql
  <properties> <mysql.version>5.1.43</mysql.version> </properties>

2.1.2、自动装配

1)@SpringBootApplication

作用:标记为项目启动类,包含三个注解 { @SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan}

@ComponentScan:作用:额外指定扫描位置,可以指定多个

@SpringBootConfiguration:作用:标记为组件

@EnableAutoConfiguration:作用:又一个复合注解包含 @AutoConfigurationPackage 和 @Import,作用如下:

@AutoConfigurationPackage:扫描当前包
@Import({AutoConfigurationImportSelector.class}):注入 Selector 类
由于该过程需要加载配置文件 Spring-boot-autoconfigure/spring.factories(在 Spring-boot-autoConfiguration:2.3.4.jar 中可以看到)
相应的在 SpringFactoriesLoader 类,写明了该成员变量所在位置:
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";

  META-INF/spring.factories 的截图如下:

总而言之:

  1. SpringBoot在启动的时候从classpath下springboot-autoconfigure.jar的META-INF/spring.factories中获取所有EnableAutoConfiguration初始值

  2. 根据 pom.xml 引入的依赖,启动需要的配置

转自:狂神说SpringBoot2


2)@Configuration 和 @Bean

@Configuration 指定某个类为配置文件,其作用是向IOC容器中添加Bean,分为Full模式和Lite模式。

Full 模式:如果注入到容器中的多个 bean 实例之间有依赖关系时,建议使用 Full 模式,默认使用 Full 全模式。

Lite 模式:在同一个Configuration配置类中,注入到容器中的 bean 实例之间没有依赖关系时,建议使用 Lite 轻量级模式,@Configuration(proxyBeanMethod=false) ,每次启动不用检测直接返回新的实例对象(不保证单例模式),以提高 springboot 的启动速度。

实例详解: https://www.cnblogs.com/Kaelthas/p/17059554.html

3)@Import

直接注入模式 ,为IOC容器添加 Bean 对象,此时Bean对象的名称为类名

/**
*使用Import 将指定的类的实例注入至Spring 容器中
*/
@Import({Customer.class,Broker.class})
public class ImportDirect {
// TODO
}

  实例详解:https://blog.csdn.net/tuoni123/article/details/80213050


2.2.3 启动一个服务

SpringApplication.run(MAIN.class, args);

这条语句,背后执行了四个功能

1)判断项目是普通项目还是 web 项目

2)查找并加载所有可用初始化器 initializer

3)查找并加载所有可用监听器 listener

4)找到运行主类 main


3、SpringBoot 配置文件

全局配置文件有两种,application.properties 和 application.yml

  • application.properties

    • 语法结构 :key=value

  • application.yml

    • 语法结构 :key:空格 value

配置文件的作用:修改 SpringBoot 的默认值

需求:写两个Bean,通过yaml赋值,然后将Bean输出到控制台

解析:

  • Bean注解@Component,标记组件;
  • Bean注解@ConfigurationProperties(prefix = "tom")添加配置文件字段头tom,引入依赖<artifactId>spring-boot-configuration-processor</artifactId>
  • <artifactId>spring-boot-starter-test</artifactId>,引入Junit依赖(父依赖中没有)

写两个Bean:User、Pet

package com.itheima.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; @Component
@ConfigurationProperties(prefix = "user01")
public class User {
String name;
int age;
Pet pet; public User() {
} public User(String name,int age) {
this.name = name;
this.age = age;
} public User(String name, int age, Pet pet) {
this.name = name;
this.age = age;
this.pet = pet;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Pet getPet() {
return pet;
} public void setPet(Pet pet) {
this.pet = pet;
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", pet=" + pet +
'}';
}
} package com.itheima.bean; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; @Component
@ConfigurationProperties(prefix = "tom")
public class Pet { String name; public Pet() { } public Pet(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Pet{" +
"name='" + name + '\'' +
'}';
}
}

  写一个运行类

package com.itheima;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext; /**
* @SpringBootApplication 标记为SpringBoot应用,作为项目启动类
*/ @SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run =
SpringApplication.run(MainApplication.class, args);
}
}

  test类,注意测试资源也要放yaml文件

package com.itheima;

import com.itheima.bean.Pet;
import com.itheima.bean.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest
public class MainApplicationTest {
@Autowired
private User user01;
@Autowired
private Pet pet;
@Test
public void contestLoads(){
System.out.println(user01);
System.out.println(pet);
} }

  yaml配置文件

user01:
name: zhangsan
age: 18
pet: tom tom:
name: tom

  结果:

  

jsr303 数据校验

配置文件的位置:项目根目录、项目根目录下的config文件夹、resources文件夹、resources文件夹下config文件夹,优先级从高到低

新建一个SpringBoot项目,应该解决哪些问题?

  • 导入静态资源
  • 首页
  • jsp,模板引擎Thymeleaf
  • 装配扩展SpringMVC
  • 增删改查
  • 拦截器
  • 国际化

静态资源文件  源文件:WebMvcAutoConfiguration.java

"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
  • public: 一般存放公共的文件,比如js
  • static: 一般存放静态资源: 比如图片
  • resources:可以在里面设置upload文件夹,用于存放上传的文件

总结:
  在springboot,我们可以使用以下方式处理静态资源

  public,static,/**,resources,直接使用localhost:8080/浏览器访问,优先级: resources>static (默认)>public

首页定制  源文件:WebMvcAutoConfiguration.java

WebMvcAutoConfiguration.java下有welcomepage的代码,其中使用到了ResourcesProperties.java文件,该文件包括一个字段 private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};该路径下的静态资源文件直接会被调用。

  • Thymeleaf 为 Controller 跳转自动添加前后缀
<!--引入thymeleaf的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • 这样Controller返回的字符串能自动跳转到 Resources/templates/index.html,因为 Thymeleaf 自动添加了前后缀

Controller:

package com.kuang.controller;
@Controller
public class IndexController {
@RequestMapping("/index")
public String IndexController(){
return "index";
}
}

ThymeleafProperties 添加前后缀:

public class ThymeleafProperties {
private String prefix = "classpath:/templates/";
private String suffix = ".html";

jsp和Thymeleaf 语法:

Thymeleaf 教程:https://www.cnblogs.com/Kaelthas/p/17068768.html

Order Feature Attributes 解释
1 Fragment inclusion th:insert
th:replace
include
2 Fragment iteration th:each 循环
3 Conditional evaluation th:if
th:unless
th:switch
th:case
条件
4 Local variable definition th:object
th:with
 
5 General attribute modification th:attr
th:attrprepend
th:attrappend
 
6 Specific attribute modification th:value
th:href
th:src
...
 
7 Text (tag body modification) th:text
th:utext
 
8 Fragment specification th:fragment  
9 Fragment removal th:remove  

后台管理系统

新建项目 java版本 和sdk 都是1.8

下一步:勾选依赖组件

SpringBoot DevTools: 实时编译

lombok: 简化 javabean开发

Spring Configuration Processors: 自定义配置代码提示

SpringWeb: 开发web

Thymeleaf: 开发模板

删除没用的文件 .mvn、.gitgnore、HELP.md、 mvnw、 mvnw.cmd

将静态资源css、fonts、images、js等静态文件夹,放到 /resources/static 下

数据库

可以修改这个配置项@ConfigurationProperties(prefix = "spring.jdbc")来修改JdbcTemplate

@RestController 等价于@Controller+@ResponseBody

@Controller 注入IOC容器

@ResponseBody 以Json形式返回数据

@RequestMapping 标记类或者方法,指定浏览器访问路径

@GetMapping 发出get请求

@Component(标记为组件类,把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>,与@Autowired连用)

@Controller 标记为Controller,注入到容器

@Services 提供被注入的类,写业务逻辑

@Repository 用于声明 dao 层的 bean

@Component、@Controller、@Services、@Repository的作用

@Mapper 与 @MapperScan:使用 Mybatis 有 XML 文件或者注解的两种使用方式,如果是使用 XML 文件的方式,我们需要在配置文件中指定 XML 的位置

Service层需要使用@Autowired或@Resource注解注入后调用Mapper里的方法时,需要将这些接口注入到Spring上下文中。有两种方法可以完成注入:
在每个类*Mapper的接口上都加一个@Mapper注解。
在SpringBoot的启动类上加一个@MapperScan并指明包路径。

直接在每个对应的Mapper类上面添加注解@Mapper。Mapper类较多时,这样使用比较麻烦。

方法二:使用扫描注解@MapperScan

@MapperScan("com.hadoopx.issue.mapper")

@MapperScan({"com.hadoopx.issue.mapper","com.hadoopx.test.mapper","com.hadoopx.paper.mapper"})

@MapperScan("com.hadoopx.*.mapper")

@MapperScan("com.hadoopx.**.mapper")

@Mapper 是 Mybatis 的注解,和 Spring 没有关系,@Repository 是 Spring 的注解,用于声明一个 Bean。(重要)

@Bean

标记方法返回一个Bean组件,用于注入

@Configuration

用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

 

SpringBoot2 简明教程的更多相关文章

  1. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  2. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  3. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  4. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

  5. 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)

        界面的显示方面就都讲完啦,下面来介绍下控件的响应.     前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...

  6. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

  7. Mac安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

  8. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

  9. 2013 duilib入门简明教程 -- 总结 (20)

        duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~       这里给出Alberl最后汇总的一个工程,戳我下载,效 ...

  10. plain framework 1 参考手册 入门指引之 简明教程

    简明教程 简单的例子 实现代码 简单的例子 如果你已经下载好整个框架的源码,那么你可以在这里找到应用的例子: plainframework/applications/pf_simple 如果你在win ...

随机推荐

  1. ZXing 生成二维码和条形码(添加NuGet包)

  2. sql学习笔记 - 1 数据库简介

    数据库简介 """ 本学习笔记来自哔哩哔哩--老男孩Python全栈开发29期全套 https://www.bilibili.com/video/BV1QE41147hU ...

  3. 图模配置文件之 mdimport.ini

    mdimport.ini文件是图模导入中最最最关键的一个配置文件,其中既包含图模导入程序model_import.model_debug相关的配置,也包含红黑图管理界面显示及应用相关的配置信息,还包含 ...

  4. SQL数据库和语法

    增删改查 SELECT prod_id, prod_name, prod_price FROM Products; SELECT * FROM Products; //增 INSERT INTO Cu ...

  5. 【Unity】protobuf故意踩坑记

    写在前面 起因:我看到工作项目使用protobuf来做序列化时脑子冒出许多问号,"以前我按<Unity3D网络游戏实战>做坦克游戏时为了让客户端和服务器使用统一协议用到了prot ...

  6. windows server 2012 AD域服务器的搭建安装 子域的创建加入 客户机加入域环境(Active Directory域)

    1,安装Active Directory域前的准备工作 2,安装Active Directory域 3,加入子域(可选) 4,加入客户机 ******************************* ...

  7. JUC学习!

    JUC 1.what? JUC就是java.util.concurrent下面的类包,专门用于多线程的开发. 2.why? 解决多线程.高并发 3.how?  ||  || ﹀ point1:vola ...

  8. Spring AOP的动态代理原理和XML与注解配置

    AOP 实现底层就是对上面的动态代理的代码进行了封装,封装后我们只需要对需要关注的部分进行代码编写,并通过配置的方式完成指定目标的方法增强. 相关术语: Target(目标对象):代理的目标对象 Pr ...

  9. tcpdump 对指定pod 进行抓包分析

    tcpdump kubectl get pod -n imas imas-chabot-759bc8c6cf-bvq7m -o json 获取到pod所在的容器信息,在对应的宿主机获取卡片信息. do ...

  10. Rethinking Table Recognition using Graph Neural Networks

    摘要:CNN用来视觉特征提取:图网络用来处理结构问题:由于缺少大量的数据,作者建立了一个合成数据集的数据库. 关键词:表格识别,结果分析:图神经网络,文档模型:图模型:数据库 源码地址;https:/ ...