1. 什么是SpringBoot?
-
.用来简化Spring应用的初始化搭建和开发过程,使用特定的方式进行配置;
-
.创建独立的Spring应用程序,main方法运行;
-
.嵌入了tomcat 无需部署war文件;
-
.简化maven配置;
-
.自动配置Spring添加对应的功能starter自动化配置。
2. Spring、SpringMVC、SpringBoot有什么区别?
-
.Spring最重要的特征就是依赖注入,当我们恰当的使用DI或IOC的时候,可以开发松耦合应用;
-
.SpringMvc提供了一套分离式的方法来开发web应用,通过DispacherServelet、ModelAndView、Resolver等一些简单的概念,开发web应用程序将变得更加简单;
-
.Spring和SpringMvc的问题在于需要进行大量的配置,SpringBoot通过自动配置和一个启动的项来解决这些问题。
3. SpringBoot自动配置的原理是什么?
在SpingBoot的启动类的上,添加@SpringBootApplication或者@EnableConfiguration会自动去maven中读取每个starter的Spring.factories文件,该文件配置了所有需要被创建的Spring容器中的bean。
4. 运行SpringBoot项目有几种方式?
-
.打包命令或者放入容器中运行;
-
.使用maven或者Gradle插件运行;
-
.直接执行main方法运行。
5. SpringBoot打成的jar和普通的jar有什么区别?
SpringBoot项目最终打成的jar,是可运行的jar,通过 java -jar xxx.jar命令来运行,这种jar不可以作为普通jar被其他项目依赖,即使依赖了也无法使用其中的类;
SpringBoot的jar不可以被其他项目依赖,主要是因为它和普通jar的结构不同,普通jar解压后直接是包名,包里就是我们需要的代码。SpringBoot的jar解压之后,在\BOOT-INF\classes\下才是代码,因此无法被直接引用。如果非要引用,可以在pom.xml中进行配置,打包成两个jar,一个可执行,一个可被引用。
6. SpringBoot的常用注解有哪些?
1).@SpringBootApplication
@SpringBootApplication是一个复合型注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan三个注解;
**@SpringBootConfiguration:**标注当前类是配置类,这个注解继承自Configuration,并且会将当前类声明的一个或多个以@Bean标注的方法纳入到Spring容器中,并且实例名就是方法名。
**@EnableAutoConfiguration:**是自动配置的注解,这个注解会根据我们配置的组件jar来完成一些默认配置,我们做微服时会添加spring-boot-starter-web这个组件jar的pom依赖,这样配置会默认配置springmvc 和tomcat。
**@ComponentScan:**扫描当前包及子包下被@Component、@Controller、@Service、@Repository注解标记的类纳入到Spring容器中进行管理。
2).其他注解
@ServletComponentScan:Servlet、Filter、listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,这样通过注解Servlet,拦截器和监听器的功能而无需其他配置。
**@MapperScan:**spring-boot支持MyBatis的一个注解,通过此注解指定MyBatis接口类的路径,即可完成对MyBatis接口的扫描。
它和@mapper注解是一样的作用,不同的地方是扫描入口不一样。@mapper需要加在每一个mapper接口类上面。所以大多数情况下,都是在规划好工程目录之后,通过@MapperScan注解配置路径完成mapper接口的注入。
添加mybatis相应组建依赖之后。就可以使用该注解。
@RestController:@Controller和@ReponseBody组合,这样更加的简洁。
7. @Configuration 和 @Component的区别
@Component注解的范围最广,所有类都可以注解,但是@Configuration一般注解在这样的类上:这个类里边有@Value注解的成员变量和@Bean注解的方法,就是一个配置类。
8. SpringBoot中的"约定优于配置"的具体产品体现在哪?
Spring Boot Strater、Spring Boot Jpa都是"约定优于配置"的体现。都是通过"约定优于配置"的思想来设计的,Spring Boot Starter在启动的过程中会根据约定的信息对资源进行初始化,Spring Boot Jpa通过约定的方式来自动生成Sql,避免大量无效代码的编写。
9. Spring Boot Starter的工作原理
SpringBoot在启动时会做这几件事:
①SpringBoot在启动时回去依赖的Starter包中寻找
Rseource/META-INF/spring.factories,然后根据文件中的Jar包去扫描项目所依赖的Jar包;
②根据spring.factories配置加载AutoConfigure类;
③根据@Conditional注解的条件,进行自动配置并将Bean注入Spring Contex;
总结:SpringBoot在启动的过程中,会按照约定去读取Spring Boot Starter的配置信息,然后再根据配置信息对资源进行初始化,并注入到Spring容器中。这样SpringBoot启动完毕后,就已经准备好了一切资源,在使用过程中直接注入对应Bean资源即可。