SpringBoot核心特性原理

SpringBoot核心特性原理(一)

1.SpringBoot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

在了解SpringBoot之前,先思考一个问题:传统Spring框架有什么缺点?
在传统的Spring项目中有以下几点缺点:

  1. 配置相对复杂(有大量的xml文件).
  2. 依赖冲突严重(maven依赖版本不同)
  3. 扩展相对复杂(尤其是分布式部署,微服务框架).

面对Spring框架使用中的缺点无法满足企业的需求,企业现在更注重技术的开箱即用,更注重轻量级的运维,由此SpringBoot诞生.
SpringBoot是一个服务于Spring框架的框架,能够简化配置文件,快速构建web项目,内置tomcat,无需打包部署,直接运行.

SpringBoot 核心特性

SpringBoot构建基于Spring框架基础之上,基于快速构建理念,提供了自动配置功能,可实现开箱即用的特性,可以简化整个项目的配置.其核心主要包括如下几个方面:

1.起步依赖( Stater Dependency)
2.自动配置(Auto Configuration)
3.健康检查(Actator)

起步依赖

起步依赖的功能是:我们只要在构建文件中指定我们所需要的功能,构建程序就会引入相应的依赖包.它就像是一个Maven项目对象模型,其内容定义了对其他库的传递依赖,这些东西加在一起就可以支持我们所需要的某项功能.
起步依赖的版本由SpringBoot的版本来决定的,而起步依赖会决定它们所引入第三方依赖的版本,确保引入的全部依赖都能够相互兼容.
实例:
在传统的Spring项目中,我们平时需要搭建一个Web项目时需要导入一下几个依赖:
Spring-web依赖和Spring-mvc依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.3.RELEASE</version>
</dependency>
 
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.3.RELEASE</version>
</dependency>

在SpringBoot项目中,搭建web项目只需要添加一个依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这个起步依赖集成了常用的web依赖,SpringBoot的起步依赖简单说就是对常用的依赖进行再一次的封装
在这里插入图片描述
如图中所示,web起步依赖中集成了各种搭建web环境常用的依赖,在SpringBoot项目中简化了pom.xml文件的配置,更重要的是将依赖交给SpringBoot,我们无需关注不同依赖的不同版本的冲突问题,添加即用.
使用起步依赖时,我们需要在pom.xml中配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

让pom.xml文件继承SpringBoot的pom.xml文件,SpringBoot中的pom.xml文件继承了常用的框架依赖以及相应的版本号.
起步以来的优点:

  1. 无需考虑不同框架的不同版本的冲突问题.
  2. 简化pom.xml文件的配置.

自动配置

在创建SpringBoot项目时,会自动创建一个启动类XXXApplication.java

package cn.myli;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootApplication.class, args);
	}

}

其中最为重要的是@SpringBootApplication这个注解,SpringBoot的自动配置都是由这个注解引入的.
点进这个注解后我们会发现它是一个复合注解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

其中重要的有这三个注解

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

其中@SpringBootConfiguration注解继承于Configuration注解,功能也一样,标注当前类是配置类,并会将类中用注解@Bean标记的方法的实例放入Spring容器中,并且实例名为方法名.
@ComponentScan注解作用是扫描当前包及子包中用注解@Component@Controller@Service@ Repository标记的类放入Spring容器中进行管理.
@EnableAutoConfiguration注解的作用:开启自动配置

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

这个注解也是一个复合注解其中 @Import 注解引入了类 AutoConfigurationImportSelector 此类中的方法getCandidateConfigurations

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
				getBeanClassLoader());
		Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
				+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

会将jar包spring-boot-test-autoconfigure-2.2.2.RELEASE.jar下的 /META-INF/spring.factories文件

点击其中一个文件部分内容为:

# AutoConfigureCache auto-configuration imports
org.springframework.boot.test.autoconfigure.core.AutoConfigureCache=\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration

Spring,factories文件内容为一组一组的key=value形式,其中key为EnableAutoConfigrution类的全类名,value为一个个的类名列表,类名以逗号分隔.
在启动SpringBoot项目时@SpringBootApplication注解会开启自动配置,SpringApplication.run()内部会执行selectImports()方法,找到所有的自动配置类的全限名对应的class,将所有的配置文件加入到Spring容器中.
总结:

Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。

引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值