0
点赞
收藏
分享

微信扫一扫

Spring Boot工作原理

zibianqu 03-10 07:30 阅读 3

Spring Boot

        Spring Boot 基于 Spring 开发,Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。
简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。

1.1.Spring Boot 优点 

为所有Spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML配置的要求

SpringBoot 运行原理

pom.xml 

主启动类的配置

//@SpringBootApplication 来标注一个主程序类
//说明这是一个Spring Boot应用
@SpringBootApplication
public class SpringbootApplication {
   public static void main(String[] args) {
     //以为是启动了一个方法,没想到启动了一个服务
      SpringApplication.run(SpringbootApplication.class, args);
   }
}

@SpringBootApplication

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    // ......
}

@ComponentScan

@SpringBootConfiguration

// 点进去得到下面的 @Component
@Configuration
public @interface SpringBootConfiguration {}
 
@Component
public @interface Configuration {}

@Configuration

@Component

@EnableAutoConfiguration

@AutoConfigurationPackage

@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}

 总结:

主启动类的运行

SpringApplication 类
最初以为就是运行了一个main方法,没想到却开启了一个服务;

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

分析该方法主要分两部分,一部分是SpringApplication的实例化,二是run方法的执行;

SpringApplication 这个类主要做了以下四件事情:

查看构造器: 

public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) {
    // ......
    this.webApplicationType = WebApplicationType.deduceFromClasspath();
    this.setInitializers(this.getSpringFactoriesInstances();
    this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
    this.mainApplicationClass = this.deduceMainApplicationClass();
}

run 方法运行原理

自动配置原理

启动类上注解的作用 


@SpringBootApplication
public class YunPiMdmServerApplication {
	private static final Logger LOG = LoggerFactory.getLogger(YunPiMdmServerApplication.class);
	public static void main(String[] args) {
		SpringApplication.run(YunPiMdmServerApplication.class, args);
		LOG.info(">>>>>>>>>>>>>>> 服务启动完毕 <<<<<<<<<<<<<<<<");
	}
 

  @SpringBootApplication 注解主要由三个子注解组成

@SpringBootConfiguration 

这个注解包含了@Configuration,@Configuration里面又包含了一个@Component注解,也就是说,这个注解标注在哪个类上,就表示当前这个类是一个配置类,而配置类也是spring容器中的组件

@EnableAutoConfiguration 

这个注解是开启自动配置的功能,里面包含了两个注解

        这个注解的作用说白了就是将主配置类(@SpringBootApplication标注的类)所在包以及子包里面的所有组件扫描并加载到spring的容器中

        这也就是为什么我们在利用springboot进行开发的时候,无论是Controller还是Service的路径都是与主配置类同级或者次级的原因

@Import(AutoConfigurationImportSelector.class)

上一个注解我们把所有组件都加载到了容器里面,这个注解就是将需要自动装配的类以全类名的方式返回,那是怎么找到哪些是需要自动装配的类呢?

@ComponentScan

 springboot自动装配的流程 

主要工作流程:

举报

相关推荐

0 条评论