当前位置:首页 > 科技  > 软件

SpringBoot的自动装配,你学会了吗?

来源: 责编: 时间:2024-05-29 08:54:19 189观看
导读我们今天再来说一下关于 SpringBoot 的自动装配,为什么会有这样的问题呢?一般这种情况都是在面试的过程中,面试官有时候会问到这个问题,就比如从开始问SpringBoot 的一些常用注解,到SpringBoot的一些特性,然后引申到这个 Sp

我们今天再来说一下关于 SpringBoot 的自动装配,为什么会有这样的问题呢?一般这种情况都是在面试的过程中,面试官有时候会问到这个问题,就比如从开始问SpringBoot 的一些常用注解,到SpringBoot的一些特性,然后引申到这个 SpringBoot 的自动装配上来。今天就和了不起一起来聊聊关于这个 SpringBoot 的自动装配吧。GDN28资讯网——每日最新资讯28at.com

什么是SpringBoot的装配

Spring Boot 的自动装配(Auto-Configuration)是指 Spring Boot 会根据项目中添加的依赖和其他因素,自动配置你的 Spring 应用程序。这一特性使得开发者在创建 Spring 应用程序时,可以省去大量的手动配置工作,从而快速启动和运行应用程序。GDN28资讯网——每日最新资讯28at.com

自动装配流程

SpringBoot的自动装配工作流程主要基于其核心注解和一系列的配置机制,以下是对其工作流程的详细解析:GDN28资讯网——每日最新资讯28at.com

1.启动注解:

  • SpringBoot的自动装配始于@SpringBootApplication注解。这个注解实际上是@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个注解的组合。

2.@SpringBootConfiguration:

  • @SpringBootConfiguration注解本质上是一个@Configuration注解的包装,用于声明当前类是一个配置类,可以定义Bean,也可以引入其他配置类。

3.@EnableAutoConfiguration:

  • 这是实现自动装配的关键注解。它包含了@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)两个子注解。
  • @AutoConfigurationPackage:用于自动配置包,使得主配置类(带有@SpringBootApplication注解的类)所在的包及其子包中的组件都能被Spring容器扫描到。
  • @Import(AutoConfigurationImportSelector.class):这个注解的作用是导入类,但在这里它并不是直接导入一个普通的类,而是导入了一个实现了ImportSelector接口的类AutoConfigurationImportSelector。这个类的作用是根据一定的规则(比如类路径下的META-INF/spring.factories文件)来加载并配置一些自动装配的类。

4.META-INF/spring.factories:

  • 在Spring Boot的自动装配过程中,META-INF/spring.factories文件起到了非常关键的作用。这个文件是Spring Boot用来加载自动配置类的一个约定俗成的文件,它位于各个Spring Boot Starter的jar包中。Spring Boot在启动时,会扫描所有jar包中的META-INF/spring.factories文件,并将其中配置的自动配置类加载到Spring容器中。

5.自动配置类:

  • 这些类通常是以AutoConfiguration结尾的,它们使用@Configuration注解标注,并且内部定义了一些Bean。这些Bean就是Spring Boot自动装配到Spring容器中的组件。

6.条件装配:

  • 在自动配置类中,经常可以看到@ConditionalOnClass、@ConditionalOnProperty等条件注解。这些注解的作用是判断当前环境是否满足某个条件,如果满足则进行自动装配,否则不进行装配。这样可以根据项目的实际情况来灵活地选择需要装配的组件。

7.总结:

SpringBoot的自动装配工作流程大致可以归纳为:首先通过@SpringBootApplication注解启动Spring Boot应用,然后利用@EnableAutoConfiguration注解中的@Import(AutoConfigurationImportSelector.class)来加载META-INF/spring.factories文件中配置的自动配置类,最后根据这些自动配置类中的定义和条件注解来将相应的组件装配到Spring容器中。GDN28资讯网——每日最新资讯28at.com

自动装配的核心

@SpringBootApplication

这个注解,就是自动装配的核心,我们来详细解读一下这个 @SpringBootApplicationGDN28资讯网——每日最新资讯28at.com

它其实是一个组合注解,用于简化 Spring Boot 应用的配置。这个注解通常被用在 Spring Boot 的主类上,以指示该类是一个特殊的配置类,用于引导应用上下文的启动。GDN28资讯网——每日最新资讯28at.com

组成部分

1.@SpringBootConfiguration:

  • 这是一个特殊的 @Configuration 注解,表示该类是一个配置类,并告诉 Spring Boot 这是一个特殊的配置类,用于加载应用的上下文设置。
  • 实际上,@SpringBootConfiguration 仅仅是 @Configuration 的一个特殊版本,并且二者在功能上没有区别。但 @SpringBootConfiguration 更多地用于标识这是一个 Spring Boot 应用。

2.@EnableAutoConfiguration:

  • 这是 Spring Boot 的核心特性之一。它告诉 Spring Boot 根据添加的 jar 依赖项、类路径设置、各种属性设置等自动配置你的 Spring 应用。例如,如果你的类路径下有 spring-boot-starter-web,那么 Spring Boot 会自动配置嵌入式 Tomcat 服务器和 Spring MVC。
  • 你可以通过 spring.autoconfigure.exclude 属性来排除某些自动配置。

3.@ComponentScan:

  • @ComponentScan 告诉 Spring 扫描当前包及其子包下的组件(如 @Component、@Service、@Repository、@Controller 等),并将它们注册为 Spring Bean。
  • 默认情况下,它会扫描标注了 @SpringBootApplication 注解的类所在的包及其子包。你可以通过 basePackages 或 basePackageClasses 属性来指定扫描的包。

如果这个时候,我们给面试官解释了这个 SpringBoot的自动装配的原理之后,面试官很大程度上就开始要往下延伸内容了,既然 @Autowired 能实现了则个自动装配,那么还有其他注解么?以及他和 @Autowired 的区别在哪呢?GDN28资讯网——每日最新资讯28at.com

@Resource和@Autowire

@Resource 和 @Autowired 都是 Spring 框架中用于自动装配 bean 的注解,但它们之间有一些区别。以下是这两个注解的主要区别:GDN28资讯网——每日最新资讯28at.com

来源不同

@Autowired 是 Spring 特有的注解,用于自动装配 bean。GDN28资讯网——每日最新资讯28at.com

@Resource 是 Java 的标准注解,属于 JSR-250 规范的一部分,但 Spring 也支持它作为自动装配的注解。GDN28资讯网——每日最新资讯28at.com

@Autowired

@Autowired 是 Spring 特有的注解,用于自动装配 bean。Spring 容器会检查 bean 的属性、方法以及构造器,然后使用与指定类型相匹配的 bean 进行自动装配。GDN28资讯网——每日最新资讯28at.com

  • 类型匹配:默认情况下,@Autowired 是基于类型(Type)的自动装配。如果存在多个相同类型的 bean,那么就需要使用其他机制(如 @Qualifier 注解或 @Primary 注解)来进一步指定。
  • 构造器注入:Spring 4.3 之后,推荐使用构造器注入来替代字段注入,因为它可以提供更好的不可变性和测试性。
  • 可配置性:@Autowired 是可选的,并且可以通过 Spring 的配置文件(如 XML 文件)进行更详细的配置。

@Resource

@Resource 是 Java EE 的一部分(来自 JSR-250),同时也是 Spring 支持的注解。它提供了更丰富的功能,包括指定名称(name)和类型(type)来查找 bean。GDN28资讯网——每日最新资讯28at.com

  • 名称和类型匹配:与 @Autowired 相比,@Resource 提供了更灵活的匹配方式。它可以基于名称(如果提供了)或类型进行查找。如果同时指定了名称和类型,并且找不到匹配的 bean,那么就会抛出异常。
  • 与 Java EE 兼容:由于 @Resource 是 Java EE 的一部分,因此它可以在任何支持 Java EE 的环境中使用,而不仅仅是 Spring。

到这里,本篇文章就接近尾声了,关于 SpringBoot的自动装配,你掌握了多少呢?GDN28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-91355-0.htmlSpringBoot的自动装配,你学会了吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 深入Go原理:协程间通信基础Chan

下一篇: 一日一技:如何正确处理多行字符串的缩进问题

标签:
  • 热门焦点
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    科技圈经常能看到一个词叫“缝合怪”,用来形容那些把好多功能或者外观结合在一起的产品,通常这样的词是贬义词,但如果真的是产品缝合的好、缝合的实用的话,那它就成了中性词,今
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼‍‍‍‍‍‍‍‍‍‍东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top