1.Spring Boot简介
1.1 Spring Boot概述
当初软件市场曾经造成肯定的规模,零碎架构的复杂度也越来越高(例如有单体架构,分布式架构,微服务架构)。软件的整个架构体系正在产生很大变动,在这种变动中,企业当初更重视技术的开箱即用,更重视技术在生态圈中的深度交融,更重视轻量级的运维。由此spring boot诞生。
1.2 Spring Boot外围个性
Spring boot是一个脚手架,构建于Spring框架(Framework)根底之上,基于疾速构建理念,提供了主动配置性能,可实现其开箱即用个性(创立完一个根本的我的项目当前,可零配置或者大量配置即可运行咱们的我的项目),其外围次要有如下几个方面:起步依赖(Starter Dependency)-我的项目创立时底层帮你关联依赖。主动配置(Auto Configuration)。健康检查(Actator)-监控。其中,Spring Boot官网地址为https://spring.io/projects/spring-boot。
2.Spring Boot环境配置
2.1 筹备工作
-工具下载1)下载JDK1.8,并进行环境变量配置2)下载最新maven(例如:apache-maven-3.6.3)网址http://maven.apache.org/3)下载sts最新版,网址https://spring.io/tools
2.2 Maven根本配置
1)关上maven中的setting.xml文件,并对其如下选项进行配置。
配置maven本地库(从maven近程服务器下载的资源存储到的地位)
2)配置maven私服(配置到mirrors标签外部)。
3)配置maven中的profile(配置到profiles标签外部),设置JDK编译和运行版本。
2.3 STS整合maven配置
1)启动sts进行Maven Instalations
2)Maven User Settings配置
3)我的项目工作区编码设置
2.4STS工具应用根本优化
批改STS工具内存配置,关上SpringToolSuite4.ini文件,批改堆大小
3.Spring Boot疾速入门
3.1 我的项目创立及构造剖析
在STS中创立Spring Boot我的项目:
3.2 我的项目启动过程剖析
SpringBoot 我的项目在启动时,首先基于启动入口类上的注解形容,进行主动配置并扫描指定包以及子包中的类进行加载,而后检测类上是否有Spring框架中指定的注解形容(例如@Component,@Controller,@Service等)。如果有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创立Bean的实例,假如此Bean指定了生命周期办法,还会调用生命周期办法。当实例创立当前,Spring框架还会基于类的作用域形容,将实例存储到不同作用域的容器中。以实现Bean对象的迷信利用。
3.3 我的项目业务初步实现及测试
业务实现:
基于SpringBoot脚手架(或者架子工),通过Spring框架进行Bean对象的治理实现。
第一步:创立一个DefaultCache类,存储到src/main/java目录,而后交给spring治理。
其中,@Component是Spring中用于形容Bean类的一个注解。用于通知Spring这个类的实例由Spring创立,当此对象由Spring创立和治理时,默认会将对象存储到池(Bean池)中。
第二步:增加sringboot 测试类,进行bean的获取及测试,要放在src/test/java目录中:
其中:
@SpringBootTest 注解用于通知spring框架,此测试类交给spring治理。
@Autowired注解形容属性时,用于通知spring框架要为此属性注入一个值?(至于注入规定,前面课程缓缓增强)
第三步:代码设计及运行剖析
在图中形容了DefaultCacheTests类与DefaultCache类的关系,这两个类通过指定注解(@SpringBootTest,@Component)进行了形容,其用意是通知spring框架这个两个类的实例的创立由Spring负责,并且由Spring框架基于@Autowired注解的形容实现DefaultCacheTests实例中无关DefaultCache类型的值的注入(DI)。
第四步:为对象设计作用域,设置提早加载,设置生命周期办法(理解)。
在Spring框架中,Spring为由它创立和治理的对象,设计了一些个性,例如作用域,提早加载,生命周期办法等,基于这些个性实现对Bean对象的治理。
其中:
@Lazy注解用于形容类,其目标是通知spring框架此类反对提早加载,通常会配合单例作用域应用。
@Scope 是Spring中用于定义Bean对象作用域的一个注解,其罕用的值有
*singleton(整个内存有一份Bean实例,此实例何时创立与类的提早加载个性配置无关,此实例创立当前,生命周期会由spring框架治理),
*prototype(每次获取都会创立新实例,此实例会在须要时创立与lazy个性无关,这个实例创立当前,不会交给spring治理,spring能够对其初始化,但不负责销毁。)等。
@PostConstruct 注解用于形容bean对象生命周期办法中的初始化办法,此办法会在对象的构造方法之后执行(是对象创立当前的初始化)。
@PreDestroy 注解用于形容Bean对象生命周期办法中的销毁办法,此办法会在对象销毁之前执行(当作用域为prototype时,此办法不会执行)。
第五步:通过测试类测试作用域,提早加载,生命周期办法
Spring框架治理Bean对象有什么劣势!!!
*Spring 是一个资源整合框架(Framework),通过spring可将很多资源(本人写的对象或第三方提供的对象,例如连接池等)整合在一起,而后进行迷信利用,以便更好的对外提供服务。
*在图中,Spring框架能够为由它治理的对象(Bean)提供懒加载策略(对象临时用不到,则无需加载和实例化),作用域(例如singleton-频繁用时能够思考内存中只有一份,prototype-应用次数少时能够用时创立,不必时销毁),生命周期办法(更好实现对象的初始化和资源销毁),以实现对象对系统资源的无效应用。同时Spring框架还能够基于用户设计治理对象与对象的依赖关系,以升高对象与对象之间的间接耦合,进步程序的可维护性和可扩展性。
3.4 我的项目业务加强实现及测试
第一步:定义业务Cache接口
第二步:定义WeakCache实现Cache接口.
第三步:创立或批改SoftCache,让此类也实现Cache接口
第四步:单元测试类
业务测试运行原理剖析
问题:
1)@Autowired注解利用规定?
2)@Qualifier注解的作用是什么?
@Autowired由spring框架定义,用于形容类中属性或相干办法(例如构造方法)。Spring框架在我的项目运行时如果发现由他治理的Bean对象中有应用@Autowired注解形容的属性或办法,能够依照指定规定为属性赋值(DI)。
其根本规定是:首先要检测容器中是否有与属性或办法参数类型相匹配的对象,如果有并且只有一个则间接注入。其次,如果检测到有多个,还会依照@Autowired形容的属性或办法参数名查找是否有名字匹配的对象,有则间接注入,没有则抛出异样。最初,如果咱们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还能够应用@Qualifier注解对其属性或参数进行形容(此注解必须配合@Autowired注解应用)。
4.Spring Boot大节总结
4.1 重难点剖析
- Spring boot 是什么? (框架,也能够看成是框架脚手架,做了架子工要做的事件-搭建我的项目根底骨架的工作人员)
- Spring boot 外围劣势?(启动依赖,主动配置-开箱即用,健康检查-系统监控)
- Spring boot 我的项目的创立形式?( https://start.spring.io)
- Spring boot我的项目启动时,Bean的初始化过程是怎么的?(查找,加载,读和存储配置,创立和存储实例对象)
- Spring boot 我的项目启动时,Bean对象的依赖注入过程是怎么的?(标记,查找,注入)
- Spring 框架中的Bean对象有什么个性?(提早加载,作用域,生命周期办法)
- Spring 框架中单例(singleton)作用域对象特点,利用场景(频繁用)?
- Spring 框架中多例(prototype)作用域对象特点,利用场景(稀少用)?
4.2 FAD剖析
1.Maven工具(我的项目构建工具)从哪里下载?(maven.apache.org)
2.STS(集成了spring插件的eclipse)工具从哪里下载?(spring.io/tools)
3.STS新版本怎么装置?(例如STS4.5.0的装置可应用:java -jar xxx.jar)
4.创立spring starter 我的项目时pom.xml文件谬误?(maven私服,本地库,maven update,网络)
5.Spring Boot我的项目中反对的配置文件后缀有哪些?(.properties,.yml)
6.SpringBoot 启动类的包扫描地位?(启动类所在包以及子包)
7.SpringBoot我的项目中能够有多个启动类吗?(不能够)
8.如何了解Spring框架?(资源整合框架,迷信利用对象-资源,低耦合)
9.Spring治理bean对象时有什么劣势?(为bean赋予了更加高级的个性,懒加载,单例作用域,生命周期办法)
10.Spring 框架中@Autowire注解形容属性时,依赖注入的规定是怎么的?
11.Spring 框架学习过程中学到了什么思维?(IOC,DI,池,低耦合,....)
12.Spring容器中bean名字不同,但类型雷同的单例作用域配置能够有多个实例吗?
4.3 BUG剖析
Maven我的项目的setting文件配置谬误
问题剖析:查看maven目录中的settings.xml的标签语法配置是否正确!
创立我的项目时网络连接超时
问题剖析:
1)域名解析问题(与当地的域名服务器无关)
2)网络阻塞问题(带宽无限,单同时的申请数量比拟多)
3)服务器线程无限(例如tomcat端线程数量配置的绝对较少)
Maven我的项目的pom.xml文件报错
问题剖析:
- 查看网络配置(是否网络畅通,不能手机网络)
- 检测maven配置是否正确(严格按文档配置执行)。
- 右键我的项目maven update 强制更新。
- 更换maven私服仓库(选文档中的)
空指针异样(NullPointerException-NPE)
问题剖析:剖析谬误形容,找到本人写的类指定行号地位,看看哪个对象在进行办法调用,调用办法的对象有没有被赋值。
依赖注入失败
问题剖析:
- 查看错误代码中本人定义的类(例如DefaultCacheTests)中的属
- 基于谬误剖析,哪个属性的值在进行依赖注入时失败了(例如DefaultCache)
- 查看注入失败的属性对应的对象是否交给了Spring治理(例如是否有特定注解形容,包构造是否正确)。
找不到对应的Bean对象
问题剖析:
- 查看你获取的这个对象实例的类型是否应用了特定注解形容(如@Component)
- 查看你获取的这个对象实例的类型所在的包是否正确(启动类包构造)
- 如果是基于Bean的名字进行Bean对象的获取,要检测Bean的名字是否正确。
依赖注入失败
问题剖析:
- 查看哪里对Cache进行了援用。
- 查看对Cache援用时应用的注解形容。
- 查看容器中Cache接口下实现类对象的定义(是否有多个?)。