1. 请说出SpringBoot的自动配置原理
SpringBoot中的自动配置主要在于@SpringBootApplication
底层使用@EnableAutoConfiguration
注解开启了自动配置,然后@EnableAutoConfiguration
注解底层使用@Import
注解导入AutoConfigurationImportSelector
自动配置导入选择器,SpringBoot在启动时会在类路径下查找MATA-INF/spring.factories
文件,并将文件中的自动配置类导入,然后将满足注解@Conditional
的自动配置类导入。
2. 为什么说Java语言是跨平台的?
Java的一个目标是一次编写处处运行,并且Java语言的运行时需要JVM(Java虚拟机的支持),基本上在各大平台上都有对应的JVM版本所以Java语言是跨平台的。Java语言的运行需要先经历三个步骤:
- 将Java代码成可以执行的字节码
.class
结尾的文件。 - 在命令行使用
java 文件名.class
执行,这个时候JVM会将class字节码转换为指定平台的字节码。
3. Spring由那些模块组成?
Spring共有七大模块:
SpringCore
:SpringCore
是Spring
中最基础的模块,这里提供了最经典的工厂模式的实现用于解决程序单例性的需求,它允许我们从程序中分离出依赖。SpringContext
:SpringContext
是建立在core模块的基础上的,它的实现还基于Beans
封装包,并且在Context
模块中添加了i18n国际化
的支持。SpringDao
:SpringDao
对JDBC
访问数据库进行了封装,它提供了一种简易的方式访问数据库,它并不是对JDBC的简易封装
,SpringDao添加了声明式事务的概念
,它允许我们以声明的方式处理事务。SpringAOP
:AOP
模块是面向切面编程的实现,它允许我们将横切关注面中的公共代码抽取出来,它允许我们以声明式的方式将这些模块运用到需要某项功能的业务方法中,如上文提到的声明式事务。SpringORM
:SpringORM
是对orm
框架的一个整合,其中包括了Hibernate
、MyBatis
等。SpringWeb
:SpringWeb
是Spring
用于开发Web应用程序而提供的,它可以使得Spring
能够很容易的与其他框架整合比如WebWork
、Strus2
等,并且Spring
能够将对象注入这些框架中,还能够在这些框架前后添加拦截器。SpringWebMVC
:WebMVC
模块提供了一种分离式的方法开发Web应用程序,它不仅仅是传统MVC的实现,它允许我们以声明式的方式将对应的请求映射到指定的处理方法上。
4. Spring、SpringMVC、SpringBoot之间的区别是什么?
- Spring框架的核心是AOP,即面向切面编程,它允许我们将公共代码抽取出来,使用Spring开发出来的代码是松散耦合的并且使易于测试的。
- SpringMVC是Spring提供的一种允许我们以分离式的方式开发Web应用程序。
- Spring、SpringMVC的使用过程中较为繁琐的地方在于他们都有大量的配置需要编写,并且稍不注意就可能出错,而SpringBoot提供了大量的Stater启动器用以解决以上问题,SpringBoot是一种快速使用Spring框架的一种方式。
5. String、StringBuffer、StringBuilder之间的区别是什么?
- String是固定大小的字符串数据。
- StringBuffer、StringBuilder都是可以动态构造的字符串数据。
- String实现
equals
方法,StringBuffer与StringBuilder没有实现。 - StringBuffer是线程安全的,StrngBuilder不是线程安全的。