【Java】Spring Boot

Spring Boot" title="Spring Boot">Spring Boot

陈阳发布于 今天 07:54

1.Spring Boot 简介

1.1 Spring Boot 概述

现在软件市场已经形成一定的规模,系统架构的复杂度也越来越高(例如有单体架构,分布式架构,微服务架构)。软件的整个架构体系正在发生很大变化,在这种变化中,企业现在更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此spring boot诞生。
说明:学技术一定要了解技术发展史,并对技术的发展有一定的前瞻性。
1.开箱即用
2.深度融合
3.轻量级的运维

1.2 Spring Boot 核心特性

Spring boot是一个脚手架(而非框架),构建于Spring框架(Framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目),其核心主要有如下几个方面:
1.起步依赖(Starter Dependency)-项目创建时底层帮你关联依赖。
2.自动配置(Auto Configuration)。
3.健康检查(Actator)-监控。
其中,Spring Boot官方地址为https://spring.io/projects/sp...。

2. Spring Boot 环境配置

2.1 准备工作

  • 工具下载

下载JDK1.8,并进行环境变量配置(假如已有则无需再次下载和配置)。
下载最新maven(例如apache-maven-3.6.3,网址http://maven.apache.org/)并解压。
下载sts最新版(例如sts-4.4.5.RELEASE,网址https://spring.io/tools)并解压(新版本下载下来时一个.jar文件,需要在jar文件所在的目录中,以命令行方式执行java -jar 下载的文件名的方式进行解压,如图-1所示(需要首先启动系统自带的命令行客户端,然后切换到软件所在目录,cd指令为切换目录的意思)。

  • 工作区准备:定义新的工作区(要求没有中文目录),例如d:/TCGBIII/CGBWORKSP。

建议:将下载的所有文件存储到同一目录并解压,例如d:/TCGBIII/TCGBTOOLS目录。要求目录不要有中文,也不要有特殊符号(例如&等)。

2.2 Maven基本配置

打开maven中的setting.xml文件,并对其如下选项进行配置。

  • 配置maven本地库(从maven远程服务器下载的资源存储到的位置)

    <localRepository>${user.home}/.m3/repository</localRepository>

  • 配置maven私服(配置到mirrors标签内部)。

    <mirror>

    <id>aliyun</id>

    <name>aliyun for maven</name>

    <mirrorOf>*</mirrorOf>

    <url>https://maven.aliyun.com/repository/public</url>

    </mirror>

  • 配置maven中的profile(配置到profiles标签内部),设置JDK编译和运行版本。

    <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>

2.3 STS整合maven配置

2.3 STS工具使用基本优化

  • 禁用拼写检查,取消图-6所示的拼写检查选项。

【Java】Spring Boot

  • 取消图-7所示的连接选项配置。取消图-7所示的连接选项配置。

【Java】Spring Boot

  • 关掉图-8的校验功能。

【Java】Spring Boot

  • 修改STS工具内存配置,打开SpringToolSuite4.ini文件,修改堆大小,如图-9所示:

【Java】Spring Boot

3. Spring Boot 快速入门

3.1 项目创建及结构分析

打开STS 集成开发工具,创建spring boot项目,其具体步骤如下:

第一步:打开项目新建窗口(快捷键ctrl+n), 搜索spring,选择spring starter 项目。如图-10所示:
【Java】Spring Boot
第二步:填写项目基本信息。如图-11所示:
【Java】Spring Boot
第三步:选择Spring Boot版本,如图-12所示:
【Java】Spring Boot
在图-12中点击finish之后,项目便开始从maven配置中指定的私服服务器(例如阿里云的maven服务器)去下载起步依赖(SpringBoot项目中默认指定了项目启动时需要的一些jar包依赖),这个过程可能会比较耗时(网络最好不要用手机网络,会导致很多资源下载不下来),假如指定版本的springboot项目以前创建过,它会默认先从本地库查找,假如本地库没有,则从远程库去下载。

项目创建成功以后,其包视图(Package Explorer)结构,如图-13所示:
【Java】Spring Boot
其中,在图-13呈现的CGB-SBOOT-01项目结构中,所有的类和配置文件都是创建好项目以后,由STS工具帮我们自动创建的。

3.2 项目启动过程分析(了解)

找到项目的入口类(使用了@SpringBootApplication注解描述),然后运行启动类,检测启动过程,SpringBoot在启动时,控制台会出现如图-14标识:找到项目的入口类(使用了@SpringBootApplication注解描述),然后运行启动类,检测启动过程,SpringBoot在启动时,控制台会出现如图-14标识:
【Java】Spring Boot

SpringBoot 项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描指定包以及子包中的类进行加载,然后检测类上是否有Spring框架中指定的注解描述(例如@Component,@Controller,@Service 等)。假如有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创建Bean的实例,假如此Bean指定了生命周期方法,还会调用生命周期方法。当实例创建以后,Spring框架还会基于类的作用域描述,将实例存储到不同作用域的容器中。以实现Bean对象的科学应用。

3.3 项目业务初步实现及测试

业务实现:
基于SpringBoot脚手架,通过Spring框架进行Bean对象的管理实现。
第一步:创建一个DefaultCache类然后交给spring 管理。

package com.cy.pj.common.cache;

@Component

public class DefaultCache {}

其中,@Component是Spring中用于描述Bean类的一个注解。用于告诉Spring这个类的实例由Spring创建,当此对象由Spring创建和管理时,默认会将对象存储到池(Bean池)中。
第二步:添加sringboot 测试类,进行bean的获取及测试,要放在test目录中:

    package com.cy.pj.common.cache;

@SpringBootTest

public class DefaultCacheTests {

@Autowired

private DefaultCache defaultCache;

@Test

public void testCache() { System.out.println(defaultCache);

}

}
其中:

  • @SpringBootTest 注解用于告诉spring框架,此测试类交给spring管理。
  • @Autowired注解描述属性时,用于告诉spring框架要为此属性注入一个值?(至于注入规则,后面课程慢慢加强)

第三步:代码设计及运行分析,如图-16所示:
【Java】Spring Boot
在图-16中描述了DefaultCacheTests类与DefaultCache类的关系,这两个类通过指定注解(@SpringBootTest,@Component)进行了描述,其意图是告诉spring框架这个两个类的实例的创建由Spring负责,并且由Spring框架基于@Autowired注解的描述完成DefaultCacheTests实例中有关DefaultCache类型的值的注入(DI)。

第四步:为对象设计作用域,设置延迟加载,设置生命周期方法(了解)。

在Spring框架中,Spring为由它创建和管理的对象,设计了一些特性,例如作用域,延迟加载,生命周期方法等,基于这些特性实现对Bean对象的管理。

package com.cy.pj.common.cache;

@Component

@Scope("singleton")

@Lazy

public class DefaultCache {

public DefaultCache() {

System.out.println("cache()");

}

@PostConstruct

public void init() {

System.out.println("init()");

}

@PreDestroy

public void destory() { System.out.println("destory")

}

}

其中:

  • @Scope 是Spring中用于定义Bean对象作用域的一个注解,其常用的值有

singleton(整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由spring框架管理),prototype(每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给spring管理,spring可以对其初始化,但不负责销毁。)等。

  • @Lazy注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用。
  • @PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行。
  • @PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行)。

第五步:通过测试类测试作用域,延迟加载,生命周期方法。

package com.cy.pj.common.cache;

@SpringBootTest

public class DefaultCacheTests {

@Autowired

private DefaultCache defaultCache;

@Test

public void testCache() {

//???

}

}

通过对上面小节的学习,能说说Spring框架管理Bean对象有什么优势吗?

Spring 是一个资源整合框架(Framework),通过spring可将很多资源(自己写的对象或第三方提供的对象,例如连接池等)整合在一起,然后进行科学应用,以便更好的对外提供服务。如图-17所示:

![image.png](https://image-static.segmentfault.com/240/054/2400544096-5f8e8a1a893ff)

在图-17中,Spring框架可以为由它管理的对象(Bean)提供懒加载策略(对象暂时用不到,则无需加载和实例化),作用域(例如singleton-频繁用时可以考虑内存中只有一份,prototype-使用次数少时可以用时创建,不用时销毁),生命周期方法(更好实现对象的初始化和资源销毁),以实现对象对系统资源的有效使用。同时Spring框架还可以基于用户设计管理对象与对象的依赖关系,以降低对象与对象之间的直接耦合,提高程序的可维护性和可扩展性。

3.4 项目业务增强实现及测试

第一步:定义业务Cache接口.

package com.cy.pj.common.cache;

public interface Cache {

}

第二步:定义WeakCache实现Cache接口.

package com.cy.pj.common.cache;

import org.springframework.stereotype.Component;

@Component

public class WeakCache implements Cache{

}

第三步:修改DefaultCache,让此类也实现Cache接口,关键代码如下:

package com.cy.pj.common.cache;

@Component

public class DefaultCache implements Cache{

}

第四步:单元测试类

package com.cy.pj.common.cache;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest

public class CacheTests {

@Autowired

@Qualifier("defaultCache")

private Cache cache;

@Test

public void testCache() {

System.out.println(cache);

}

}

业务测试运行原理分析,如图-18所示:
【Java】Spring Boot

思考:

  1. @Autowired注解应用规则?
  2. @Qualifier注解的作用是什么?

    @Autowired由spring框架定义,用于描述类中属性或相关方法。Spring框架在项目运行时假如发现由他管理的Bean对象中有使用@Autowired注解描述的属性或方法,可以按照指定规则为属性赋值(DI)。其基本规则是:首先要检测容器中是否有与属性或方法参数类型相匹配的对象,假如有并且只有一个则直接注入。其次,假如检测到有多个,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。具体过程可参考图-18的设计进行自行尝试和实践。

4. Spring Boot 小节总结

4.1 重难点分析

  • Spring boot 是什么? (脚手架而非框架)
  • Spring boot 核心优势?(启动依赖,自动配置-开箱即用,健康检查-系统监控)
  • Spring boot 项目的创建方式?( https://start.spring.io)

  • Spring boot项目启动时,Bean的初始化过程是怎样的?(查找,加载,读和存储配置,创建和存储实例对象)
  • Spring boot 项目启动时,Bean对象的依赖注入过程是怎样的?(标记,查找,注入)

4.2 FAQ分析

  • Maven工具(项目构建工具)从哪里下载?(maven.apache.org)
  • STS(集成了spring插件的eclipse)工具从哪里下载?(spring.io/tools)
  • STS新版本怎么安装?(例如STS4.5.0的安装可使用:java -jar xxx.jar)
  • 创建spring starter 项目时pom.xml文件错误?(工具版本,maven私服,本地库,maven update,网络)
  • Spring Boot项目中支持的配置文件后缀有哪些?(.properties,.yml)
  • SpringBoot 启动类的包扫描位置?(启动类所在包以及子包)
  • SpringBoot项目中可以有多个启动类吗?(不可以)
  • 如何理解Spring框架?(资源整合框架,科学应用对象-资源,解耦)
  • spring管理bean对象时有什么优势?

4.3 bug分析

  • Maven项目的setting文件配置错误,如图-19所示:
    问题分析:检查maven目录中的settings.xml的标签语法配置是否正确
  • 创建项目时网络连接超时,如图-20所示:
  • Maven项目的pom.xml文件报错,如图-21所示:
    问题分析:

  1. 检查网络配置(是否网络畅通,不能手机网络)
  2. 检测maven配置是否正确(严格按文档配置执行)。
  3. 右键项目maven update 强制更新。
  4. 更换maven私服仓库(选文档中的)

  • 空指针异常(NullPointerException),如图-22所示:【Java】Spring Boot

问题分析:分析错误描述,找到自己写的类指定行号位置,看看哪个对象在进行方法调用,调用方法的对象有没有被赋值。

  • 找不到对应的Bean对象,如图-24所示:【Java】Spring Boot

问题分析:

  1. 检查你获取的这个对象实例的类型是否使用了特定注解描述
  2. 检查你获取的这个对象实例的类型所在的包是否正确
  3. 假如是基于Bean的名字进行Bean对象的获取,要检测Bean的名字是否正确。

  • 依赖注入失败,如图-25所示:

问题分析:【Java】Spring Boot

  1. 检查哪里对Cache进行了引用。
  2. 检查对Cache引用时使用的注解描述。
  3. 检查容器中Cache接口下实现类对象的定义(是否有多个?)。

javaspringboot

阅读 8更新于 今天 07:59

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

陈阳

1 声望

0 粉丝

0 条评论

得票时间

avatar

陈阳

1 声望

0 粉丝

宣传栏

1.Spring Boot 简介

1.1 Spring Boot 概述

现在软件市场已经形成一定的规模,系统架构的复杂度也越来越高(例如有单体架构,分布式架构,微服务架构)。软件的整个架构体系正在发生很大变化,在这种变化中,企业现在更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此spring boot诞生。
说明:学技术一定要了解技术发展史,并对技术的发展有一定的前瞻性。
1.开箱即用
2.深度融合
3.轻量级的运维

1.2 Spring Boot 核心特性

Spring boot是一个脚手架(而非框架),构建于Spring框架(Framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目),其核心主要有如下几个方面:
1.起步依赖(Starter Dependency)-项目创建时底层帮你关联依赖。
2.自动配置(Auto Configuration)。
3.健康检查(Actator)-监控。
其中,Spring Boot官方地址为https://spring.io/projects/sp...。

2. Spring Boot 环境配置

2.1 准备工作

  • 工具下载

下载JDK1.8,并进行环境变量配置(假如已有则无需再次下载和配置)。
下载最新maven(例如apache-maven-3.6.3,网址http://maven.apache.org/)并解压。
下载sts最新版(例如sts-4.4.5.RELEASE,网址https://spring.io/tools)并解压(新版本下载下来时一个.jar文件,需要在jar文件所在的目录中,以命令行方式执行java -jar 下载的文件名的方式进行解压,如图-1所示(需要首先启动系统自带的命令行客户端,然后切换到软件所在目录,cd指令为切换目录的意思)。

  • 工作区准备:定义新的工作区(要求没有中文目录),例如d:/TCGBIII/CGBWORKSP。

建议:将下载的所有文件存储到同一目录并解压,例如d:/TCGBIII/TCGBTOOLS目录。要求目录不要有中文,也不要有特殊符号(例如&等)。

2.2 Maven基本配置

打开maven中的setting.xml文件,并对其如下选项进行配置。

  • 配置maven本地库(从maven远程服务器下载的资源存储到的位置)

    <localRepository>${user.home}/.m3/repository</localRepository>

  • 配置maven私服(配置到mirrors标签内部)。

    <mirror>

    <id>aliyun</id>

    <name>aliyun for maven</name>

    <mirrorOf>*</mirrorOf>

    <url>https://maven.aliyun.com/repository/public</url>

    </mirror>

  • 配置maven中的profile(配置到profiles标签内部),设置JDK编译和运行版本。

    <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>

2.3 STS整合maven配置

2.3 STS工具使用基本优化

  • 禁用拼写检查,取消图-6所示的拼写检查选项。

【Java】Spring Boot

  • 取消图-7所示的连接选项配置。取消图-7所示的连接选项配置。

【Java】Spring Boot

  • 关掉图-8的校验功能。

【Java】Spring Boot

  • 修改STS工具内存配置,打开SpringToolSuite4.ini文件,修改堆大小,如图-9所示:

【Java】Spring Boot

3. Spring Boot 快速入门

3.1 项目创建及结构分析

打开STS 集成开发工具,创建spring boot项目,其具体步骤如下:

第一步:打开项目新建窗口(快捷键ctrl+n), 搜索spring,选择spring starter 项目。如图-10所示:
【Java】Spring Boot
第二步:填写项目基本信息。如图-11所示:
【Java】Spring Boot
第三步:选择Spring Boot版本,如图-12所示:
【Java】Spring Boot
在图-12中点击finish之后,项目便开始从maven配置中指定的私服服务器(例如阿里云的maven服务器)去下载起步依赖(SpringBoot项目中默认指定了项目启动时需要的一些jar包依赖),这个过程可能会比较耗时(网络最好不要用手机网络,会导致很多资源下载不下来),假如指定版本的springboot项目以前创建过,它会默认先从本地库查找,假如本地库没有,则从远程库去下载。

项目创建成功以后,其包视图(Package Explorer)结构,如图-13所示:
【Java】Spring Boot
其中,在图-13呈现的CGB-SBOOT-01项目结构中,所有的类和配置文件都是创建好项目以后,由STS工具帮我们自动创建的。

3.2 项目启动过程分析(了解)

找到项目的入口类(使用了@SpringBootApplication注解描述),然后运行启动类,检测启动过程,SpringBoot在启动时,控制台会出现如图-14标识:找到项目的入口类(使用了@SpringBootApplication注解描述),然后运行启动类,检测启动过程,SpringBoot在启动时,控制台会出现如图-14标识:
【Java】Spring Boot

SpringBoot 项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描指定包以及子包中的类进行加载,然后检测类上是否有Spring框架中指定的注解描述(例如@Component,@Controller,@Service 等)。假如有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创建Bean的实例,假如此Bean指定了生命周期方法,还会调用生命周期方法。当实例创建以后,Spring框架还会基于类的作用域描述,将实例存储到不同作用域的容器中。以实现Bean对象的科学应用。

3.3 项目业务初步实现及测试

业务实现:
基于SpringBoot脚手架,通过Spring框架进行Bean对象的管理实现。
第一步:创建一个DefaultCache类然后交给spring 管理。

package com.cy.pj.common.cache;

@Component

public class DefaultCache {}

其中,@Component是Spring中用于描述Bean类的一个注解。用于告诉Spring这个类的实例由Spring创建,当此对象由Spring创建和管理时,默认会将对象存储到池(Bean池)中。
第二步:添加sringboot 测试类,进行bean的获取及测试,要放在test目录中:

    package com.cy.pj.common.cache;

@SpringBootTest

public class DefaultCacheTests {

@Autowired

private DefaultCache defaultCache;

@Test

public void testCache() { System.out.println(defaultCache);

}

}
其中:

  • @SpringBootTest 注解用于告诉spring框架,此测试类交给spring管理。
  • @Autowired注解描述属性时,用于告诉spring框架要为此属性注入一个值?(至于注入规则,后面课程慢慢加强)

第三步:代码设计及运行分析,如图-16所示:
【Java】Spring Boot
在图-16中描述了DefaultCacheTests类与DefaultCache类的关系,这两个类通过指定注解(@SpringBootTest,@Component)进行了描述,其意图是告诉spring框架这个两个类的实例的创建由Spring负责,并且由Spring框架基于@Autowired注解的描述完成DefaultCacheTests实例中有关DefaultCache类型的值的注入(DI)。

第四步:为对象设计作用域,设置延迟加载,设置生命周期方法(了解)。

在Spring框架中,Spring为由它创建和管理的对象,设计了一些特性,例如作用域,延迟加载,生命周期方法等,基于这些特性实现对Bean对象的管理。

package com.cy.pj.common.cache;

@Component

@Scope("singleton")

@Lazy

public class DefaultCache {

public DefaultCache() {

System.out.println("cache()");

}

@PostConstruct

public void init() {

System.out.println("init()");

}

@PreDestroy

public void destory() { System.out.println("destory")

}

}

其中:

  • @Scope 是Spring中用于定义Bean对象作用域的一个注解,其常用的值有

singleton(整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由spring框架管理),prototype(每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给spring管理,spring可以对其初始化,但不负责销毁。)等。

  • @Lazy注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用。
  • @PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行。
  • @PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行)。

第五步:通过测试类测试作用域,延迟加载,生命周期方法。

package com.cy.pj.common.cache;

@SpringBootTest

public class DefaultCacheTests {

@Autowired

private DefaultCache defaultCache;

@Test

public void testCache() {

//???

}

}

通过对上面小节的学习,能说说Spring框架管理Bean对象有什么优势吗?

Spring 是一个资源整合框架(Framework),通过spring可将很多资源(自己写的对象或第三方提供的对象,例如连接池等)整合在一起,然后进行科学应用,以便更好的对外提供服务。如图-17所示:

![image.png](https://image-static.segmentfault.com/240/054/2400544096-5f8e8a1a893ff)

在图-17中,Spring框架可以为由它管理的对象(Bean)提供懒加载策略(对象暂时用不到,则无需加载和实例化),作用域(例如singleton-频繁用时可以考虑内存中只有一份,prototype-使用次数少时可以用时创建,不用时销毁),生命周期方法(更好实现对象的初始化和资源销毁),以实现对象对系统资源的有效使用。同时Spring框架还可以基于用户设计管理对象与对象的依赖关系,以降低对象与对象之间的直接耦合,提高程序的可维护性和可扩展性。

3.4 项目业务增强实现及测试

第一步:定义业务Cache接口.

package com.cy.pj.common.cache;

public interface Cache {

}

第二步:定义WeakCache实现Cache接口.

package com.cy.pj.common.cache;

import org.springframework.stereotype.Component;

@Component

public class WeakCache implements Cache{

}

第三步:修改DefaultCache,让此类也实现Cache接口,关键代码如下:

package com.cy.pj.common.cache;

@Component

public class DefaultCache implements Cache{

}

第四步:单元测试类

package com.cy.pj.common.cache;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest

public class CacheTests {

@Autowired

@Qualifier("defaultCache")

private Cache cache;

@Test

public void testCache() {

System.out.println(cache);

}

}

业务测试运行原理分析,如图-18所示:
【Java】Spring Boot

思考:

  1. @Autowired注解应用规则?
  2. @Qualifier注解的作用是什么?

    @Autowired由spring框架定义,用于描述类中属性或相关方法。Spring框架在项目运行时假如发现由他管理的Bean对象中有使用@Autowired注解描述的属性或方法,可以按照指定规则为属性赋值(DI)。其基本规则是:首先要检测容器中是否有与属性或方法参数类型相匹配的对象,假如有并且只有一个则直接注入。其次,假如检测到有多个,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。具体过程可参考图-18的设计进行自行尝试和实践。

4. Spring Boot 小节总结

4.1 重难点分析

  • Spring boot 是什么? (脚手架而非框架)
  • Spring boot 核心优势?(启动依赖,自动配置-开箱即用,健康检查-系统监控)
  • Spring boot 项目的创建方式?( https://start.spring.io)

  • Spring boot项目启动时,Bean的初始化过程是怎样的?(查找,加载,读和存储配置,创建和存储实例对象)
  • Spring boot 项目启动时,Bean对象的依赖注入过程是怎样的?(标记,查找,注入)

4.2 FAQ分析

  • Maven工具(项目构建工具)从哪里下载?(maven.apache.org)
  • STS(集成了spring插件的eclipse)工具从哪里下载?(spring.io/tools)
  • STS新版本怎么安装?(例如STS4.5.0的安装可使用:java -jar xxx.jar)
  • 创建spring starter 项目时pom.xml文件错误?(工具版本,maven私服,本地库,maven update,网络)
  • Spring Boot项目中支持的配置文件后缀有哪些?(.properties,.yml)
  • SpringBoot 启动类的包扫描位置?(启动类所在包以及子包)
  • SpringBoot项目中可以有多个启动类吗?(不可以)
  • 如何理解Spring框架?(资源整合框架,科学应用对象-资源,解耦)
  • spring管理bean对象时有什么优势?

4.3 bug分析

  • Maven项目的setting文件配置错误,如图-19所示:
    问题分析:检查maven目录中的settings.xml的标签语法配置是否正确
  • 创建项目时网络连接超时,如图-20所示:
  • Maven项目的pom.xml文件报错,如图-21所示:
    问题分析:

  1. 检查网络配置(是否网络畅通,不能手机网络)
  2. 检测maven配置是否正确(严格按文档配置执行)。
  3. 右键项目maven update 强制更新。
  4. 更换maven私服仓库(选文档中的)

  • 空指针异常(NullPointerException),如图-22所示:【Java】Spring Boot

问题分析:分析错误描述,找到自己写的类指定行号位置,看看哪个对象在进行方法调用,调用方法的对象有没有被赋值。

  • 找不到对应的Bean对象,如图-24所示:【Java】Spring Boot

问题分析:

  1. 检查你获取的这个对象实例的类型是否使用了特定注解描述
  2. 检查你获取的这个对象实例的类型所在的包是否正确
  3. 假如是基于Bean的名字进行Bean对象的获取,要检测Bean的名字是否正确。

  • 依赖注入失败,如图-25所示:

问题分析:【Java】Spring Boot

  1. 检查哪里对Cache进行了引用。
  2. 检查对Cache引用时使用的注解描述。
  3. 检查容器中Cache接口下实现类对象的定义(是否有多个?)。

以上是 【Java】Spring Boot 的全部内容, 来源链接: utcz.com/a/110325.html

回到顶部