SpringBoot的自动配置原理,java大数据处理技术

本文探讨了SpringBoot的@AutoConfigurationPackage注解,它用于自动配置包,扫描主配置类所在的包及子包中的组件。尽管其功能看似与@ComponentScan重叠,但实际作用在于扫描@Entity类。此外,还介绍了@Import的作用,它用于导入配置类,有直接导入、条件选择和动态注册Bean三种方式。最后,@SpringBootApplication被解释为组合了@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解的等价物。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单来说,这个注解可以帮助我们自动载入应用程序所需要的所有默认配置

如果你的类路径下有tomcat-embedded.jar包,那么你很可能就需要TomcatServletWebServerFactory

我们点进去看一下,发现有两个比较重要的注解:

在这里插入图片描述

  • @AutoConfigurationPackage:自动配置包

  • @Import:给IOC容器导入组件

1.2.1 @AutoConfigurationPackage

网上将这个**@AutoConfigurationPackage注解解释成自动配置包**,我们也看看@AutoConfigurationPackage里边有什么:

在这里插入图片描述

我们可以发现,依靠的还是@Import注解,再点进去查看,我们发现重要的就是以下的代码:

默认的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。

  • 看完这句话,会不会觉得,这不就是ComponentScan的功能吗?这俩不就重复了吗?

我开始也有这个疑问,直到我看到文档的这句话:

it will be used when scanning for code @Entity classes. It is generally recommended that you place EnableAutoConfiguration (if you’re not using @SpringBootApplication) in a root package so that all sub-packages and classes can be searched.

比如说,你用了Spring Data JPA,可能会在实体类上写@Entity注解。这个@Entity注解由@AutoConfigurationPackage扫描并加载,而我们平时开发用的@Controller/@Service/@Component/@Repository这些注解是由ComponentScan来扫描并加载的。

  • 简单理解:这二者扫描的对象是不一样的。

1.2.2回到Import

我们发现它使用了 Spring 框架提供的 @Import 注解注入了注册 Bean 的配置类,在往下分析前,不妨先了解一下这个 @Import 注解,在我们平时使用 Spring 框架的 Enable* 类注解时,发现它们都有一个共同的特点,就是都有一个 @Import 注解,用来导入配置类,这些配置方式又分为三种类型:

  • 直接导入配置类:@Import({xxxConfiguration.

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

class})

  • 依据条件选择配置类:@Import({xxxSelector.class})

  • 动态注册 Bean:@Import({xxxRegistrar.class})

我们回到@Import(AutoConfigurationPackages.Registrar.class)这句代码上,再点进去AutoConfigurationPackages.Registrar.class看看具体的实现是什么:

/**

  • {@link ImportBeanDefinitionRegistrar} to store the base package from the importing

  • configuration.

*/

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

@Override

public void registerBeanDefinitions(AnnotationMetadata metadata,

BeanDefinitionRegistry registry) {

register(registry, new PackageImport(metadata).getPackageName());

}

@Override

public Set determineImports(AnnotationMetadata metadata) {

return Collections.singleton(new PackageImport(metadata));

}

}

1.3总结

================================================================

@SpringBootApplication等同于下面三个注解:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值