乐趣区

关于springboot:SpringBoot初学

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)

  1. 提供懒加载策略(对象临时用不到,则无需加载和实例化),
  2. Scope 作用域(例如 singleton-(单例)频繁用时能够思考内存中只有一份,
    prototype-(多例)应用次数少时能够用时创立,不必时销毁),
  3. Lifecycle method 生命周期办法(更好实现对象的初始化和资源销毁),以实现对象对系统资源的无效应用。
    实现 bean 对象的无效治理。
    同时 Spring 框架还能够基于用户设计 治理对象与对象的依赖关系,
    以升高对象与对象之间的间接耦合,
    进步程序的可维护性和可扩展性。

6.Spring 框架中单例 (singleton) 作用域对象特点,利用场景(频繁用)?

特点:保障一个类仅有一个实例,并提供一个拜访它的全局拜访点。并且因为实例是在 Instance 属性办法外部创立的,因而类能够应用附加性能(例如,对子类进行实例化),即便它可能引入不想要的依赖性。而且直到对象要求产生一个实例才执行实例化;这种办法称为“惰性实例化”。惰性实例化防止了在应用程序启动时实例化不必要的 singleton
利用场景:须要回收重要资源 (数据库连贯等) 的事宜配置为 singleton,如果配置为 prototype 须要利用确保资源失常回收。

  1. Windows 的 Task Manager(工作管理器)就是很典型的单例模式
  2. windows 的 Recycle Bin(回收站)也是典型的单例利用。在整个零碎运行过程中,回收站始终保护着仅有的一个实例。
  3. 网站的计数器,个别也是采纳单例模式实现,否则难以同步。
  4. 应用程序的日志利用,个别都何用单例模式实现,这个别是因为共享的日志文件始终处于关上状态,因为只能有一个实例去操作,否则内容不好追加。
  5. Web 利用的配置对象的读取,个别也利用单例模式,这个是因为配置文件是共享的资源。
  6. 数据库连接池的设计个别也是采纳单例模式,因为数据库连贯是一种数据库资源。数据库软件系统中应用数据库连接池,次要是节俭关上或者敞开数据库连贯所引起的效率损耗,这种效率上的损耗还是十分低廉的,因为何用单例模式来保护,就能够大大降低这种损耗。
  7. 多线程的线程池的设计个别也是采纳单例模式,这是因为线程池要不便对池中的线程进行管制。
  8. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。

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 对象
退出移动版