SpirngBopt快速入门(容器)
什么是约定大于配置
在springboot中,只要导入了web-stater,spring mvc、json、spring核心容器等web场景需要的所有依赖都会导入,并控制好版本
spring boot的理念就是约定大于配置,在spring boot中提供了一套默认配置,不需要手动去写xml配置文件,只有默认配置不能满足我们的需求时,才会去修改配置。
Spirng是一个框架开源 2003年兴起的一个轻量级的java开发框架 作者Rod Johnson
Spring是为了解决企业级应用开发的复杂性而创建的,简化开发
Spring是如何简化java开发的
为了降低java开发复杂性,Spring采用了一下四种关键策略:
1.基于POJO的轻量级和最小侵入性编程;2.通过IOC,依赖注入(DI)和面向接口的实现松耦合; 基于切面(AOP)和惯例声明式编程;4.通过切面和模板减少样式代码
什么是SpirngBoot
就是一个javaweb的开发框架,和SpringMVC类似,对比其他的javaweb框架的好处,官方说简化开发,约定大于配置,对于其他框架的开发好处,就是简化开发,约定大于配置,开发接口简单,maven整合jar包,他整合所有框架,
SpringBoot本身不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷的开发新一代基于Spring框架的应用程序,也就是说他并不是用来代替Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者的体验工具。
数据库:Redis、MongDB、Jpa、RabbitMQ、Quratz
微服务架构
1.单体应用架构(all in one )将应用服务封装在一个在一个应用中,
数据库访问,web访问等等各个功能放到一个war包内
一个大型系统的微服务架构,就像一个复杂交织的神经网络,每个神经元素就是一个功能 ,他们各自完成等自己的功能,只需要更新升级其中一个功能服务单元即可
优点:易于开发测试,部署方便,当需要部署时,只需要复制war包放到多个服务器上,负载就可以
缺点:修改摸个地方的时候需要停掉整个服务,重新打包、部署应用war包维护难
2.微服务架构:把功能单元放在一个应用里面,然后部署到服务器上,
优点:把每个功能独立出来,独立出来动态组合,整合多个功能元素,对功能赋值,没有对整个应用复制 高内聚低耦合
MVC MVVM 微服务架构 ==> 模块
controller ==>提供接口
原理初探
自动配置:
- pom.xml
spring-boot-dependencies <!--核心依赖在父工程中-->
- 我们在写或者引入一些SpringBoot一来的时候,不需要指定版本,就因为有这些版本仓库
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
启动器:就是springboot的启动场景
比如spring-boot-starter-web 他就会自动导入web环境所有的依赖
springboot会将所有的场景,都变成一个个启动器 用什么功能就加入什么启动器
主程序:
注解 :
@SpringBootConfiguration自动配置
@Configuration: spring 配置
@Component: 说明这也是一个spring组件
@EnableAutoConfiguration 自动导入配置 重要
@AutoConfigurationPackage :自动配置包
@Import(AutoConfigurationPackage.Registrar.class): 自动配置`包注册`
@Import(AutoConfigurationImportSelector.class):自动配置导入选择
//获取所有的配置
List<String> configurations = getCandidateConfigurations(annotationMetdata,attributes);
获取候选的配置
Protected List<String> getCandateConfigurations(AnnotationMetadata metadata,AnnotationAttributes attributes){
List<String> configurations = SpringFactoriesLoader.loadFatoryNames(getSpringFatoriesLoaderFatoryClass(),getBeanCalssLoader());
Assert.notEmpty(configurations,"No auto configuration classes found in META-INF/spring.factoryies.If you " + "are using a custom packaging, make sure that file is correct.");
return comfigurations;
}
META-INF/spirng.factories: 自动配置核心文件
ProPorperties