spring-boot 查找bean流程

一、bean的位置

spring-boot在两个位置查找bean

  • 项目中的bean:只要告送spring-boot从哪个包下开始查找就可以

  • jar包中的bean:这里有两个问题

    1. 过滤jar包: 一个应用的jar包太多,并不是所有jar包都有bean,像apache 的工具包
    2. 过滤文件:jar包中的文件太多,哪些文件是bean?,如果每个文件都过滤,那效率会很低

    第一个问题,通过为jar包打上一个标记来解决,spring-boot通过查找jar包下包含/META-INF/spring.factories文件来过滤jar包
    第二个问题,通过在spring.factories文件中org.springframework.boot.autoconfigure.EnableAutoConfiguration属性内容记录bean的路径,来告送spring-boot有哪些bean

二、查找bean流程
  • 项目中的bean的查找
    有两种方式:

    1. @SpringBootApplication注解启动时配置
        //@SpringBootApplication.scanBasePackages指定了从哪个包开始查找bean。如果不指定该属性,则会从启动类所在的包下开始查找。    
        @SpringBootApplication(scanBasePackages = "")
        public class SpringTestApplication {
    
            public static void main(String[] args) {
                SpringApplication.run(SpringTestApplication.class, args);
            }
    
        }
    
    1. @ComponentScan 注解配置
        //basePackages 指定了从哪个包开始查找bean,
        @Configuration
        @ComponentScan(basePackages = {
            "com.test.core.config", "com.test.core.spring"
        })
        public class TestConfiguration {
    
        }
    
  • jar包中的bean查找
    下面是 @SpringBootApplication和@EnableAutoConfiguration 部分内容,‘->’ 代表引入。
    @SpringBootApplication->@EnableAutoConfiguration->AutoConfigurationImportSelector.class
    AutoConfigurationImportSelector 是实现查找的关键类,负责遍历项目中的jar包,并读取spring.factories中的内容并缓存起来。

@EnableAutoConfiguration
public @interface SpringBootApplication {}

@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}
public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware,
		ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered {
        //读取spring.factories文件中的 EnableAutoConfiguration属性内容
        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;
	}
 }
三、beanDefinition 注入
  1. 项目启动后会将当前启动类 包装为beanDefinition并注入容器。
  2. 启动后将org.springframework.context.annotation.ConfigurationClassPostProcessor 类注入容器,ConfigurationClassPostProcessor 会解析启动类,处理@Configuration@ComponentScan@Import@ImportResource@Bean 并注入解析得到的beanDefinition。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot Autoconfigure 是 Spring Boot 框架中的一个重要组成部分,它可以自动配置 Spring 应用程序。它通过在 classpath 中查找特定的类和配置文件来确定应用程序需要的 bean,然后自动配置这些 bean。这样可以简化应用程序的配置,并使应用程序更容易启动和运行。 ### 回答2: Spring Boot是一个非常受欢迎的框架,用于快速构建Spring应用程序。Spring Boot将应用程序的配置和依赖项自动化,并提供了许多便捷的功能,使得应用程序可以快速开发并且易于维护。其中一个关键的特性是spring-boot-autoconfigure。 Spring Boot Autoconfigure是一个重要的模块,提供了自动化配置的功能。使用spring-boot-autoconfigure,我们可以让Spring Boot自动根据 classpath 和配置属性来创建Bean,并将它们注册到Spring应用程序上下文。自动配置大大减少了配置应用程序所需的手动代码量,减轻了开发者的负担,并且减少了出现配置错误的机会。 Spring Boot Autoconfigure核心是一个名为AutoConfiguration的机制。AutoConfiguration是在Spring Boot应用程序启动时执行的,它检查classpath中的各种类和jar包,检测是否存在需要自动配置的类,并创建对应的Bean并将其注册到应用程序上下文中。AutoConfiguration的规则是通过条件注解来实现的。如果满足条件注解的条件,就会自动注入相应的Bean。如果不满足条件,Bean则不会被创建。 对于开发者而言,使用spring-boot-autoconfigure可以省去很多配置的烦恼,可以更加专注于应用程序的业务逻辑的开发。此外,自动配置自动适配不同的环境,可以在开发、测试、生产等环境中都能够正常使用。 需要注意使用spring-boot-autoconfigure时,不会自动为您解决所有问题。有时,您需要根据实际情况进行定制和配置。但总体而言,使用spring-boot-autoconfigure可以极大地提高开发效率和代码质量。 ### 回答3: Spring Boot是一个快速开发常见Web应用程序的框架。它采用了约定优于配置的方式,随着多年的发展和完善,已经变成了Java开发中非常流行的框架。而spring-boot-autoconfigure模块则是Spring Boot框架中的一个非常重要的模块,它能够让开发者在开发过程中更加便捷地进行配置管理和自动装配。 简单来说,spring-boot-autoconfigure就是一组自动化的配置规则,它能够根据一系列的默认约定和开发者自定义的配置信息,自动初始化和配置各个组件和依赖之间的关系,以达到更加灵活、简单、高效的开发效果。 具体来讲,spring-boot-autoconfigure一般包含如下几个要素: 1.条件加载——根据不同的条件,自动配置相应的组件 Spring Boot中的很多组件都是基于条件加载的方式进行自动装配的。例如,当classpath中存在某个特定的类、某个特定的Bean已经注入等条件成立时,spring-boot-autoconfigure就会自动加载对应的组件,从而简化了开发者的配置工作,并提升了开发效率和程序的可维护性。 2.注解装配——自动转换Bean,实现组件的依赖管理 Spring Boot框架通过注解的方式实现自动转换Bean。在spring-boot-autoconfigure中,注解装配是非常重要的一个功能,通过它可以让开发者更加方便地进行组件的注入和管理,并能够自动解决各个组件之间的依赖关系。 3.默认设置——提供默认的设置,并允许进行自定义 Spring Boot框架通过默认设置来达到快速的开发效果。而spring-boot-autoconfigure则提供了一组默认设置,并允许开发者在这个基础上进行自定义。这样一来,开发者在开发过程中就可以根据自己的实际需求来进行更加灵活、高质量的自定义设置。 综上所述,spring-boot-autoconfigure模块使得Spring Boot框架的配置和自动装配变得更加简单和高效,开发者只需要遵循一些默认约定和规则,就能够轻松构建出高效、稳定的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值