什么是SpringBoot
Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
springBoot优缺点
- 优点:
- 继承了Spring优秀的底层框架
- 简化编码
- Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 starter-web 依赖即可Spring Boot 这个 starter-web 已经包含了多个依赖,包括之前在 Spring 工程中需要导入的依赖
- 简化配置
- Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置
- 简化部署
- 在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot 内嵌了 tomcat,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面有一个注解是@SpringBootApplication,它也是 Spring Boot 的核心注解
- SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能
- EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能
- ComponentScan:Spring组件扫描。
Spring Boot 的配置文件有哪几种格式?它们有什么区别?
- 在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割;
- yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值;
- 在yml中缩进一定不能使用TAB,否则会报很奇怪的错误;
- 程序会先加载yml文件,再加载properties文件
springBoot的自动装配
[springboot自动装配原理剖析]
- 在springboot的主配置类中有一个@SpringBootApplication注解
- 这SpringBootApplication注解中有三个重要注解: @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootConfiguration封装了spring原生的@Configuration注解 ,
@ComponentScan注解用来定义IoC容器需要扫描哪些类文件。 - @EnableAutoConfiguration注解是自动装配的核心
在@EnableAutoConfiguration中通过@Import注解导入AutoConfigurationlmportSelector自动装配类
这个自动装配类实现了DeferredImportSelector接口,DeferredImportSelector接口又继承了ImportSelector接口
在ImportSelector接口中有一个selectImports方法 - AutoConfigurationImportSelector类中重写了selectImports方法
这个方法返回的是一个数组,里面装的是自动装配的包的路径,作用是找到满足配置的所有带注解的类,然后交给Spring进行处理 - 在selectImport方法中调用了getAutoConfigurationEntry方法,这个方法先判断是否进行自动装配,如果需要,会调用getCandidateConfigurations方法
- 在getCandidateConfigurations方法中调用SpringFactoriesLoader类
SpringFactoriesLoader类会读取springbootJAR包里的META-INF/spring.factories文件下的EnableAutoConfiguration的配置确定要装配的类 - SpringBoot的自动化配置重度依赖@EnableAutoConfiguration注解、SpringFactoriesLoader类、META-INF/spring.factories文件等要素。
运行 Spring Boot 有哪几种方式?
- 打包用命令或者放到容器中运行
- 用 Maven/Gradle 插件运行
- 直接执行 main 方法运行
SpringBoot注解
- @Override 重写, 标识覆盖它的父类的方法
- @Deprecated 已过期,表示方法是不被建议使用的
- @Repository: 用于标注数据访问组件,即DAO组件
- @Service: 用于标注业务层组件
- @Controller: 用于标注控制层组件
- @Component: 把该中立的类交给spring管理
- @Autowired: 自动装配,将bean容器里的值自动注入到bean
- @Transactional: 声明这service所有方法都需要事务管理。每一个业务方法开始时都会打开一个事务
推荐阅读:
springboot的注解的作用说明(全)
自动装配原理
springboot是通过main方法下的SpringApplication.run方法启动的,启动的时候他会调用refshContext方法,先刷新容器,然后根据解析注解或者解析配置文件的形式祖册bean,而它是通过启动类的SpringBootApplication注解进行开始解析的,他会根据EnableAutoConfiguration开启自动化配置,里面有个核心方法ImportSelect选择性的导入,根据loadFanctoryNames根据classpash路径以MATA-INF/spring.factorces下面以什么什么EnableAutoConfiguration开头的key去加载里面所有对应的自动化配置,他并不是把这一百二十多个自动化配置全部导入,在他每个自动化配置里面都有条件判断注解,先判断是否引入相互的jar包,再判断容器是否有bean再进行注入到bean容器