首页 > 其他分享 >SpringBoot自动配置(面试重点)

SpringBoot自动配置(面试重点)

时间:2024-07-24 20:27:00浏览次数:13  
标签:SpringBoot 配置 面试 Bean 导入 自动 注解 Import

自动配置是指:

自动配置是指在应用程序启动时,SpringBoot根据classpath路径下的jar包自动配置应用程序所需的一系列bean和组件,从而减少开发者的配置工作,提高开发效率。

一:Condition

Condition是spring4.0之后添加的条件判断功能,通过这个功能可以实现选择性的创建Bean操作。Condition 接口定义了一个方法 matches (ConditionContext context, AnnotatedTypeMetadata metadata)。

语法:

@Condition({"要扫的包1","要扫的包2"})

添加在启动类上,当前项目启动时会自动扫描参数中包名的所有bean对象并将其存储到IOC容器中。

优势:

能全面的扫描的包内的所有bean对象。

缺点:

性能慢,开发中不是所有的bean都需要(主流开发不使用)。

二:@Enable

@Enable被大量用于进行启动某些功能,其底层使用的就是@import注解。导入一些配置类,实现Bean的动态加载。

@Import注解

@Enable底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中。

而@Import提供4中用法:

① 导入Bean

② 导入配置类

③ 导入 ImportSelector 实现类。一般用于加载配置文件中的类 //最常用的

④ 导入 ImportBeanDefinitionRegistrar 实现类。

走一遍源码:

这里@SpringBootApplication是自动装配的注解,进入

这里发现了很多注解,其中有三个叫

@SpringBootConfiguration:组合了@Configuration注解,表示这是一个配置类

@EnableAutoConfiguration:允许自动配置

@ComponentScan:Spring的组件扫描,默认扫描main方法所在类所在的包及其子包

其中第二个注解@EnableAutoConfiguration是实现自动配置的关键。

@EnableAutoConfiguration注解进入:

这里有个@Import的注解,里面存放了一个AutoConfigurationImportSelector的类,

我们进这个类:

这个类实现了DeferredImportSelector等接口

在DeferredImportSelector接口中有一个selectImports,里面规定了哪些Bean需要被自动装配,根据里面的方法:this.getCandidateConfigurations方法进入,

查看load方法

该方法进入了一个META-INF/spring的目录,文件后缀是.imports

可以在左侧的依赖里面进行查看,这里面有133个Bean,可以被自动装配,也就是常用的自动装配的哪些Bean。

总结:

启动类中有一个@SpringBootApplication注解,包含了@EnableAutoConfiguration代表开启自动装配

@EnableAutoConfiguration注解里面组合了一个@Import注解,这个注解是实现自动配置的关键。

@Import注解最终的作用可以总结如下:到spring-boot-autoconfigure包下的META-INF/spring目录中寻找.imports结尾的文件,这里面列举了所有需要自动配置的类,程序会读取这些类并加载(但这些类不会全部加载,因为有的类上面有条件注解,需要满足特定条件时才会生效)

三:自动义启动器

1、创建autoconfigure模块 并添加自动配置的支持,如:@ConditionalOnClass@ConditionalOnMissingBean

2、创建starter模块,依赖autoconfigure的模块

3、在autoconfigure模块中初始化对象A的Bean,并定义META INF/spring.factories文件

4、在测试模块中引入自定义的starter依赖,测试获取对象A的Bean,输出A的地址。

标签:SpringBoot,配置,面试,Bean,导入,自动,注解,Import
From: https://blog.csdn.net/qq_64669006/article/details/140671684

相关文章

  • SpringBoot整合Swagger2,代码文档一手抓
    文章目录引言什么是swaggerSwagger的优势SpringBoot整合Swagger2添加Swagger依赖application.yml配置配置类SwaggerConfig启动类配置RESTful实战案例参考常见swagger注解说明页面访问效果常见错误引言什么是swaggerSwagger是一个规范且完整的框架,用于生成、描......
  • Java基础常见面试题学习(上)
    1、JVMvsJDKvsJRE①Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的JVM实现是Java语言“一次编译,随处可以运行”的关键所在。JVM并不是只有一种!只要满足JVM规范,......
  • 记录荒废了三年的四年.net开发的第二次面试(进复试了)
    这次面试的是小公司,深圳计通智能,面试分为初试和复试。使用腾讯视频会议完成。相比与上次面试,这次有所进步,进复试了。当然,这可能也与面试风格有关。这次面试着重与项目经历和技术,因此回答比较顺畅。这一周干了什么我先是研究了上次面试没回答出来,或者回答得不好的技术问题。然后......
  • Springboot整合redis
    引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>修改配置文件//单机模式配置spring.redis.host=172.16.7.21 //ip地址spring.redis.port=6379 //端口号s......
  • 求职面试 - 计算机网络面试知识点
    计算机网络面试知识点1.计算机网络基础1.1主机间的通信方式客户端-服务器(C/S)客户端是服务的请求放,服务器是服务的提供方。对等(P2P)不用区分谁是客户端,谁是服务器,双方都能够向对方请求与提供服务。1.2电路&分组交换分组交换每个分组由首部和尾部组成,包含源地址......
  • 求职面试 - Spring 面试知识点
    Spring面试知识点1.Spring特点Spring主要有如下特点:轻量级:Spring是非侵入式,其中的对象不依赖Spring的特定类;控制反转(IoC):通过IoC,促进了低耦合,一个对象依赖的其他对象通过被动的方式传递进来,而不用该对象主动创建或查找;面向切面(AOP):支持面向切面编程,将应用业务逻辑......
  • Java学习 - Springboot 集成 Security 入门小实例
    前言SpringSecurity是Spring家族中一个强大可定制的身份验证和访问控制框架,和Shiro一样,它们都具有认证、授权、加密等用于权限管理的功能。但相比于Shiro,SpringSecurity的功能无疑更加强大。而且作为Spring家族中的一份子,配合家族中的其它兄弟-SpringBoot、S......
  • 2024 | 大模型算法工程师相关面试题汇总及答案解析
    前言在准备大模型的面试时,我们需要对模型的基础理论、进阶应用、微调策略、以及特定技术如LangChain、参数高效微调(PEFT)等有深入的理解。这里给大家整理了一份详细的面试题,帮助大家提前进行面试复习,同时对自己的技术进行查漏补缺。一、大模型基础面试题目前主流的开源模......
  • 面试杂技第一篇
    1.探究微前端https://mp.weixin.qq.com/s/997pVVxdgpOH6ZsDsFAh2g2.通讯产品https://yunxin.163.com/im?from=bd_IM_bdjj202302363.jquery+bootstrap基础参考案列https://www.51fapiao.cn/fpcx/query.html4.二次封装基于AntDesign+VUE3二次封装antd选择器目的:解决后......
  • Linux 服务器中如何实现 Docker 自动清理回收空间
    简介Docker是一个流行的容器化平台,但在使用过程中可能会占用大量磁盘空间。为了保持系统的整洁和高效,我们可以设置定时任务来自动清理Docker资源。本教程将指导你如何设置cron任务,以每天凌晨3点自动执行Docker清理命令。准备工作确保你的系统上已安装Docker。确保......