spring boot 核心原理
1.它是个什么东西?
它是一个服务于spring框架的框架,把原先大量的配置文件缩减成一个application.properties/application.yml,开发人员可以更加便捷的开发;它可以快速构建一个web应用,内置了tomcat,无需打包部署,直接运行;特点是“约定优于配置”。
2.什么是约定优于配置?
一般的目录结构如下:
a).在resoureces下存放配置文件:application.yml
表示当前使用的是application-dev.yml开发环境的配置文件,(.yml文件必须严重注意格式,否则报错。)
在配置文件中可以处理好数据库、tomcat等一系列配置,及其简便了开发人员的开发。
b).默认的打包方式为jar
pom文件中引入了spring-boot-starter-web,其中包含了spring-boot-starter和spring-boot-web,包含了自动配置、日志和YAML,自动帮我们引入了web模块开发需要的相关jar包;还内嵌了tomcat容器,一键启动项目。
springboot启动原理
@SpringBootApplication注解由三个注解组成:
@Configuration:表示是一个IoC容器的配置类;
@EnableAutoConfiguration:把所有符合条件的@Configuration配置都加载到当前项目所创建并使用的IoC容器中;
@ComponentScan:扫描当前所有加了@Component 、@Repository、@Service、@Controller的类到IoC容器中。
1.springboot的自动装配原理是什么?
run()方法中会执行refreshContext()方法:
内部会解析我们的配置类上的标签.实现自动装配功能的注解。
@EnableAutoConfiguration中@Import注解会引入配置类AutoConfigurationImportSelector,这个类里有个SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());方法,会读取jar包中的/项目中的META-INF/spring.factories文件;
2.springboot的spi机制
spi机制的全称是Service Provider Interface,是为某个接口寻找实现的机制;当前项目提供了服务接口的实现之后,在jar包的META-INF/services/目录里同时创建以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。通过这个约定,就不需要把服务放在代码中了,通过模块被装配的时候就可以发现服务类了。