Spring Boot
Spring Boot的优点
- 配置变得简单了
- springboot内嵌了servlet容器,降低了对环境的要求,机器有java运行环境,可以将项目打包成jar包,通过java命令 java -jar ***.jar 来执行。
- 快速整合第三方框架,无需配置文件
- 解决了Spring的弊端
- 代码少了、配置文件少了、不需要对第三方框架烦恼了、项目精简了,对整个团队的开发及维护来说,更大的节约了成本。
- 使用Java或Groovy开发基于Spring的应用程序非常容易。
- 它减少了大量的开发时间并提高了生产力。
- 它避免了编写大量的样板代码,注释和XML配置。
- Spring Boot应用程序与其Spring生态系统(如Spring JDBC,Spring ORM,Spring Data,Spring Security等)集成非常容易。
- 遵循“自用默认配置”方法,以减少开发工作量。
- 提供嵌入式HTTP服务器,如Tomcat,Jetty等,以开发和测试Web应用程序非常容易。
- 提供CLI(命令行界面)工具从命令提示符,非常容易和快速地开发和测试Spring Boot(Java或Groovy)应用程序。
- 提供了许多插件来开发和测试Spring启动应用程序非常容易使用构建工具,如Maven和Gradle。
- 提供了许多插件,以便与嵌入式和内存数据库工作非常容易。
Spring Boot的限制
- 将现有或传统的Spring Framework项目转换为Spring Boot应用程序是一个非常困难和耗时的过程。它仅适用于全新Spring项目。
- 微服务感觉像是架构中的组合模式。把能独立的业务模块分离出来单独部署。实现开发、维护上的分离。避免整体升级带来的麻烦。
SpringBoot程序启动流程
- SpringBoot程序启动时,启动类的main方法是程序的入口,执行
SpringApplication.run(BootApplication.class, args);
- 第一个参数为启动类的类对象,第二个为String可变参数,通常不写。
当程序开始启动时,在启动类中调用SpringApplication的静态run方法,此时会执行以下操作
- 首先新建一个SpringApplication对象
在SpingApplication对象的方法执行过程中
获取webApplicationType 类型,当springboot应用打包方式为war包时,该类型 为SERVLET
注入ApplicationContextInitializer初始化器
设置监听器ApplicationListener - 执行对象的run方法,
新建一个StopWatch,并启动用于监测程序运行时间
获取SpringApplicationRunListeners对象,并启动该监听器
根据启动时传入的参数args,新建ApplicationArguments对象
新建ConfigurableEnvironment对象,具体类型为StandardServletEnvironment,在其创建过程中将会加载springboot的配置文件application.properties,同时将其绑定的SpringApplication程序中
创建ConfigurableApplicationContext对象context,并对该对象设置环境属性,遍历ApplicationContextInitializer对该对象进行初始化,
通过context对象获取BeanFactory注册applicationArguments单列
执行context的刷新操作 - 对配置的启动类所在包及子包中的类进行扫描,对于有spring相关注解的类,通过反射为其创建代理对象,并交由spring容器管理
Spring Boot自动配置的原理
- SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
- @EnableAutoConfiguration的作用是利用AutoConfigurationImportSelector给容器中导入一些组件。
- 可以查看public String[] selectImports(AnnotationMetadata annotationMetadata)方法的内容。
- 通过protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories";
- 然后把扫描到的这些文件包装成Properties对象。
- 从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中。
- 整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中。
- 每一个这样XXAutoConfiguration类都是容器中的一个组件都加入到容器中,用他们来做自动配置。
每一个自动配置类进行自动配置功能,以HttpEncodingAutoConfiguration为例解释自动配置原理。 - 根据当前不同的条件判断,决定这个配置是否生效。
Spring Boot简化了配置,内置了Servlet容器,支持快速整合第三方框架,提高了开发效率。然而,将传统Spring项目转换为Spring Boot可能耗时。启动流程涉及SpringApplication.run方法,包括创建ApplicationContext,初始化配置,扫描并管理Bean。自动配置通过@EnableAutoConfiguration开启,扫描"META-INF/spring.factories",将符合条件的配置类加入容器,根据条件生效。
10万+

被折叠的 条评论
为什么被折叠?



