1.SpringBoot是什么?
Spring boot是一个脚手架,构建于Spring框架(Framework)根底之上,基于疾速构建理念,提供了主动配置性能,可实现其开箱即用个性(创立完一个根本的我的项目当前,可零配置或者大量配置即可运行咱们的我的项目)
2.SpringBoot外围劣势是什么?
- 起步依赖(Starter Dependency)-我的项目创立时底层帮你关联依赖。
- 主动配置(Auto Configuration)。
- 健康检查(Actator)-监控
3.SpringBot我的项目启动时,Bean的初始化过程是怎么的?
SpringBoot我的项目在启动时,首先基于启动入口类的注解形容,进行主动配置并扫描指定包以及自包中的类进行加载,而后检测类上是否有Spring框架中指定的注解形容(例如@Component,@Controller,@Service等),即查找,加载,读和存储配置,创立和存储实例对象。如果有,则将类交给Spring框架中的BeanFactory工厂接口的实现类对象,此工厂对象会基于反射创立Bean的实例如果指定了生命周期办法,还会调用生命周期办法,当实例创立当前,Spring框架还会基于类的作用域形容,将实例对象存储到不必作用域的容器中,以实现Bean对象的迷信利用。如图所示:
XxxApplication示意启动类
Xxx.class示意磁盘中的字节码文件
BeanFactory为创立Bean的工厂
ApplicationContext为治理Bean对象的作用域的上下文对象
Map<String.Object>为存储个种作用域的容器
4.SpringBoot 我的项目启动时,Bean对象的依赖注入过程是怎么的?(标记,查找,注入)
如图:
在上图中形容了DefaultCacheTests类与DefaultCache类的关系,这两个类通过指定注解(@SpringBootTest,@Component)进行了形容,其用意是通知spring框架这个两个类的实例的创立由Spring负责,并且由Spring框架基于@Autowired注解的形容实现DefaultCacheTests实例中无关DefaultCache类型的值的注入(DI)。
5.Spring 框架中的Bean对象有什么个性?(提早加载,作用域,生命周期办法)
Spring框架能够为由它治理的对象(Bean)
- 提供懒加载策略(对象临时用不到,则无需加载和实例化),
- Scope作用域(例如singleton-(单例)频繁用时能够思考内存中只有一份,
prototype-(多例)应用次数少时能够用时创立,不必时销毁), - Lifecycle method生命周期办法(更好实现对象的初始化和资源销毁),以实现对象对系统资源的无效应用。
实现bean对象的无效治理。
同时Spring框架还能够基于用户设计 治理对象与对象的依赖关系,
以升高对象与对象之间的间接耦合,
进步程序的可维护性和可扩展性。
6.Spring 框架中单例(singleton)作用域对象特点,利用场景(频繁用)?
特点:保障一个类仅有一个实例,并提供一个拜访它的全局拜访点。并且因为实例是在 Instance 属性办法外部创立的,因而类能够应用附加性能(例如,对子类进行实例化),即便它可能引入不想要的依赖性。而且直到对象要求产生一个实例才执行实例化;这种办法称为“惰性实例化”。惰性实例化防止了在应用程序启动时实例化不必要的 singleton。
利用场景:须要回收重要资源(数据库连贯等)的事宜配置为singleton,如果配置为prototype须要利用确保资源失常回收。
- Windows的Task Manager(工作管理器)就是很典型的单例模式
- windows的Recycle Bin(回收站)也是典型的单例利用。在整个零碎运行过程中,回收站始终保护着仅有的一个实例。
- 网站的计数器,个别也是采纳单例模式实现,否则难以同步。
- 应用程序的日志利用,个别都何用单例模式实现,这个别是因为共享的日志文件始终处于关上状态,因为只能有一个实例去操作,否则内容不好追加。
- Web利用的配置对象的读取,个别也利用单例模式,这个是因为配置文件是共享的资源。
- 数据库连接池的设计个别也是采纳单例模式,因为数据库连贯是一种数据库资源。数据库软件系统中应用数据库连接池,次要是节俭关上或者敞开数据库连贯所引起的效率损耗,这种效率上的损耗还是十分低廉的,因为何用单例模式来保护,就能够大大降低这种损耗。
- 多线程的线程池的设计个别也是采纳单例模式,这是因为线程池要不便对池中的线程进行管制。
- 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
9. HttpApplication 也是单位例的典型利用。相熟ASP.Net(IIS)的整个申请生命周期的人应该晓得HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例.
总结以上,不难看出:
单例模式利用的场景个别发现在以下条件下:
(1)资源共享的状况下,防止因为资源操作时导致的性能或损耗等。如上述中的日志文件,利用配置。
(2)管制资源的状况下,不便资源之间的相互通信。如线程池等。
7.Spring 框架中多例(prototype)作用域对象特点,利用场景(稀少用)?
特点:prototype拜访一次创立一个实例,相当于new。
与singleton区别:singleton的生命周期由容器来治理,然而prototype的生命周期得你本人治理
利用场景:有状态的Bean(比方说MVC中的action)配置成singleton会引发未知问题,能够思考配置为prototype。
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对象时有什么劣势?(为bean赋予了更加高级的个性,懒加载,单例作用域,生命周期办法)
- Spring 框架中@Autowire注解形容属性时,依赖注入的规定是怎么的?
- 链接:https://segmentfault.com/a/11...
- Spring 框架学习过程中学到了什么思维?(IOC,DI,池,低耦合,....)
IOC的了解:管制反转的容器。把对象的获取的主动权交出去
DI: 依赖注入,通过在构建bean对象的时候,把数据退出到对象中,所谓的依赖的意思就是这里的数据有可能是通过其它的bean对象失去的。 - Spring容器中bean名字不同,但类型雷同的单例作用域配置能够有多个实例吗?
1、应用@Qualifier注解 指定具体bean名称
2、应用@Primary注解 在申明bean的时候,通过将其中一个可选的bean设置为首选
BUG剖析
*Maven我的项目的setting文件配置谬误
- 创立我的项目时网络连接超时
- Maven我的项目的pom.xml文件报错
- 空指针异样(NullPointerException-NPE)
- 依赖注入失败
- 找不到对应的Bean对象