Spring-Boost 自动配置 原理分析

Spring-Boot 自动配置 原理分析

pom.xml

  • Spring-Boot-dependencies: 核心依赖在父工程里
<parent>
    <groupId>io.terminus.dalaran</groupId>
    <artifactId>dalaran-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
  • 当我们写入或者引入依赖的时候,不需要制定版本,因为都在仓库中由maven 统一管理

启动器

  • Spring-Boot的启动场景
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
  • 比如 spring-boot-web-starter他会帮助我们自动导入web环境所有的依赖
  • Spring-Boot会将所有的功能场景变成一个个的启动器,所以当我们需要某个功能的时候,只需要找到对应的启动器start就行了

主程序

//此处为注解,标注这是一个SpringBoot类,删掉程序则不能运行
//获取类下所有的资源导入
@SpringBootApplication
public class HelloworldApplication {
   public static void main(String[] args) {
      //启动程序
      SpringApplication.run(HelloworldApplication.class, args);
   }
}

注解

@SpringBootConfiguration    //Springboot的配置
	@Configuration			//Spring配置类
	@Component				//说明这是一个Springle组件

@EnableAutoConfiguration    //自动配置
	@AutoConfigurationPackage	//自动导入包		 
		@Import({Registrar.class})	//自动导入注册器
    @Import({AutoConfigurationImportSelector.class})	//自动导入选择器
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);	//获取所有的配置

获取候选的配置

    protected AnnotationAttributes getAttributes(AnnotationMetadata metadata) {
        String name = this.getAnnotationClass().getName();
        AnnotationAttributes attributes = AnnotationAttributes.fromMap(metadata.getAnnotationAttributes(name, true));
        Assert.notNull(attributes, () -> {
            return "No auto-configuration attributes found. Is " + metadata.getClassName() + " annotated with " + ClassUtils.getShortName(name) + "?";
        });
        return attributes;
    }
  • ==META-INF/spring.factories.==自动配置的核心配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F85p95Sb-1597129880975)(F:\Notes\JavaSpring-Boost\1.png)]


SpringApplication类

它主要作用为以下四点:

推断应用是一个普通的项目还是一个web项目
查找并且加载所有可用初始化容器,并且设置到Initializers属性之中
找出所有的应用程序监听器,并且设置到listeners属性之中
推断并且设置main方法的定义类,找到运行的主类

小结

Springboot所有的自动配置都是在启动的时候扫面并且加载:spring.factories所有的自动配置类都在这里面了,但是不一定都会生效,必须要满足条件,导入了对应的start,这样就有了相应的启动器,等有了启动器之后才会生效,自动装配就成功了。

特点

  • springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值;
  • 将这些自动配置的类导入容器,自动配置就会生效,帮助我们进行自动配置;
  • 以前我们需要自动配置的东西,现在springboot都帮我们完成了;
  • 整合JavaEE,解决方法和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下;
  • 它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器之中;
  • 容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类容器中导入了这个场景需要的所有组件(并且自动配置),@Configuration,JavaConfig;
    件就会被添加到容器之中;
  • 容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类容器中导入了这个场景需要的所有组件(并且自动配置),@Configuration,JavaConfig;
  • 有了自动配置类,免去了我们手动编写配置文件的工作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot自动装配原理是通过扫描外部引用jar包中的META-INF/spring.factories文件来加载配置信息,并将配置的类型信息加载到Spring容器中,并执行相应的操作。\[1\]在SpringBoot中,我们只需引入对应的starter依赖,就可以自动完成对第三方依赖的配置操作,无需手动编写特定的bean。\[1\] 具体实现原理是通过在resources目录下创建一个spring.factories文件,文件中配置了需要自动装配的类的全限定名,使用@EnableAutoConfiguration注解来启用自动装配。\[2\]在SpringBoot的主启动类上使用@SpringBootApplication注解,该注解包含了@SpringBootConfiguration、@ComponentScan和@EnableAutoConfiguration三个注解。其中@SpringBootConfiguration注解表示该类是SpringBoot配置类,@ComponentScan注解用于扫描被@Component注解的bean,@EnableAutoConfiguration注解是自动装配的核心注解。\[3\] 总结起来,SpringBoot自动装配原理是通过扫描外部引用jar包中的配置文件,加载配置信息,并根据配置信息自动完成对第三方依赖的配置操作,简化了开发者的配置工作。 #### 引用[.reference_title] - *1* *2* *3* [Springboot自动装配原理](https://blog.csdn.net/weixin_43324905/article/details/123949084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值