SpringBoot自动装配原理

SpringBoot自动装配原理

pow.xml

  • spring-boot-dependencies:核心依赖在父工程中
  • 我们在在写或者引用一些SpringBoot依赖的时候,不需要指定版本,就有这些版本仓库

启动器

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-star</artifactId>
           <version>2.2.6.RELEASE</version>
       </dependency>
  • 启动器:就是SpringBoot启动场景
  • 比如 spring-boot-starter-amqp 会自动帮我们导入amqp环境的所有依赖!
  • SpringBoot会将所有的功能场景,都变成一个个的启动类。
  • 我们需要什么功能就找到相对应的启动类。

主程序

#标注这个类是一个SpringBoot的应用
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.changgou.goods.feign"})
@EnableElasticsearchRepositories(basePackages ="com.changgou.search.dao")
public class SearchApplication {
   public static void main(String[] args) {

       //设置elasticsearch属性防止启动报错
       //解决netty冲突
       System.setProperty("es.set.netty.runtime.available.processors","false");
       SpringApplication.run(SearchApplication.class,args);
   }

}

注解

@SpringBootConfiguration:(SpringBoot的配置)
     @Configuration:(spring的配置类)
         @Component:(spring的组件)
@EnableAutoConfiguration :(SpringBoot的自动配置)
    @AutoConfigurationPackage:(自动配置包)
         @Import(AutoConfigurationPackages.Registrar.class):(导入注册器)
    @Import(AutoConfigurationImportSelector.class):(自动配置导入选择器  )    

#获取所有的配置  
List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes); 
#获取候选配置        
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;
	}
  

SpringBoot的核心配置文件:
META-INF/spring.factories

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

  1. SpringBoot在启动的时候,从类路径下 META-INF/spring.factories获取指定的值;
  2. 将这些自动配置的类导入容器,自动配置就会生效,将我们自动配置!
  3. 以前我们需要自动配置的东西,现在SpringBoot自动帮我们做了!
  4. 整合JavaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.1.4.RELEASE.jar这个包下。
  5. 它会把需要导入的组件,以类名的方式返回,这些组件就会添加到容器;
  6. 容器中也会存在非常多的XXXAutoConfiguration的文件(@Bean),就是说这些类给容器中导入了这个场景需要的所有组件;并自动配置,@Configuration,javaConfig!
  7. 有了自动配置类,免去了我们手动编写配置文件的工作!

SpringApplication.run在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值