当前位置: 首页 > news >正文

大厂面试真题:SpringBoot的核心注解

其实理解一个注解就行了@SpringBootApplication,我们的启动类其实就加了这一个

但是这么答也不行,因为面试官要的答案肯定不止这一个

我们打开SpringBootApplication的源码,会发现上面加了一堆的注解

相对而言比较重要是下面三个,但是ComponentScan这个是SpringContext里本身带的并不是SpringBoot引入的,这个注解的作用是

扫描含有特定注解的类:@ComponentScan能够扫描指定包及其子包中所有使用@Component、@Service、@Repository、@Controller等注解的类,并将这些类实例化为Bean,注册到Spring容器中。这意味着开发者可以在需要的地方通过自动装配(如@Autowired)直接使用这些Bean,而无需手动创建。
扫描含有@Configuration的类:除了扫描注解Bean外,@ComponentScan还能扫描含有@Configuration的类,并使其配置生效。这允许开发者将配置类也纳入Spring容器的管理范围。

我们再解释一下其他两个注解的作用

(1)SpringBootConfiguration注解

@SpringBootConfiguration的代码如下

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {@AliasFor(annotation = Configuration.class)boolean proxyBeanMethods() default true;
}

这个注解的其实主要的就是引入了一个Configuration的注解,SpringBoot启动类加SpringBootConfiguration这个的作用基本上等同于加了个@Configuration注解,表示当前SpringBoot的启动类也是一个配置类

(2)EnableAutoConfiguration注解

主要的代码逻辑如下

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {/*** Environment property that can be used to override when auto-configuration is* enabled.*/String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";/*** Exclude specific auto-configuration classes such that they will never be applied.* @return the classes to exclude*/Class<?>[] exclude() default {};/*** Exclude specific auto-configuration class names such that they will never be* applied.* @return the class names to exclude* @since 1.3.0*/String[] excludeName() default {};}

我们重点看最后一个,它使用@Import注解导入了一个AutoConfigurationImportSelector.class

这个是SpringBoot实现自动配置的最重要的类,它用来加载classpath下spring.factories中所定义的自动配置类,将这些类自动加载为配置Bean

(3)ConditionalOnXXX系列注解

@ConditionalOn开头的注解在Spring Boot中非常常见,它们提供了一套丰富的条件化配置机制,允许开发者根据特定的条件来控制配置类或Bean的创建。这些注解基于@Conditional元注解实现,通过内部定义的Condition接口来判断条件是否满足

主要有以下几种:

1. @ConditionalOnBean

  • 作用:当指定的Bean存在时,条件成立,将创建当前Bean或激活当前配置类。

2. @ConditionalOnMissingBean

  • 作用:当指定的Bean不存在时,条件成立,将创建当前Bean或激活当前配置类。

3. @ConditionalOnClass

  • 作用:当类路径上存在指定类时,条件成立,将激活当前配置类。

4. @ConditionalOnMissingClass

  • 作用:当类路径上不存在指定类时,条件成立,将激活当前配置类。

5. @ConditionalOnProperty

  • 作用:当指定的配置属性具有特定的值时,条件成立,将创建当前Bean或激活当前配置类。

6. @ConditionalOnExpression

  • 作用:当指定的SpEL(Spring Expression Language)表达式的结果为true时,条件成立,将创建当前Bean或激活当前配置类。

这个其实一共应该有14种,其他的不太常用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微软推迟在MDM设备上启用OOBE强制更新 因为IT管理员反馈称缺乏控制
  • 交易验证码识别数据集
  • Python:百度贴吧实现自动化签到
  • 人工智能课程实训方案
  • Vue3(二)计算属性Computed,监视属性watch,watchEffect,标签的ref属性,propos属性,生命周期,自定义hook
  • html+css(如何用css做出京东页面,静态版)
  • Directives Vue3 自定义指令
  • 由于安全风险,安全领导者考虑禁止人工智能编码
  • 【html】基础(一)
  • SQLServer数据分页
  • 关于 mybatis-plus-boot-starter 与 mybatis-spring-boot-starter 的错误
  • 快速理解TCP协议(一)——TCP协议深度解析
  • Ubuntu20.04 搜索不到任何蓝牙设备
  • 微软宣布弃用面向企业的WSUS更新服务 仍然保留该服务但不再添加任何新功能
  • 50页PPT麦肯锡精益运营转型五步法
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • ComponentOne 2017 V2版本正式发布
  • es的写入过程
  • Java知识点总结(JavaIO-打印流)
  • JDK 6和JDK 7中的substring()方法
  • Python中eval与exec的使用及区别
  • select2 取值 遍历 设置默认值
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue全家桶实现一个Web App
  • yii2权限控制rbac之rule详细讲解
  • 服务器之间,相同帐号,实现免密钥登录
  • 关于字符编码你应该知道的事情
  • 简单数学运算程序(不定期更新)
  • 今年的LC3大会没了?
  • 七牛云假注销小指南
  • 前言-如何学习区块链
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 入门级的git使用指北
  • 使用agvtool更改app version/build
  • 通过git安装npm私有模块
  • 通过npm或yarn自动生成vue组件
  • 鱼骨图 - 如何绘制?
  • 原生js练习题---第五课
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • PostgreSQL之连接数修改
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # SpringBoot 如何让指定的Bean先加载
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (2020)Java后端开发----(面试题和笔试题)
  • (4)(4.6) Triducer
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (CPU/GPU)粒子继承贴图颜色发射
  • (k8s中)docker netty OOM问题记录
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (补)B+树一些思想
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm经济信息门户网站 毕业设计 141634