不能错过,看源码之前必须要知道的注解

记录看源码必须了解的一些注解

大家好,我是炭治,一名爱探索的程序员,喜欢用简单的话,把重要的点说清楚。

元注解

@AliasFor

用于指定注解属性之间的别名关系。

通过@AliasFor,可以使得两个属性具有相同的含义,从而增加了注解的灵活性和可读性

less 复制代码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    @AliasFor("value") // value 和 name 是互相的别名
    String value() default "";

    @AliasFor("value") // value 和 name 是互相的别名
    String name() default "";
}

注解

组合注解:将多个现有的注解组合在一起,形成一个新的注解,以简化配置和提高可读性

@Configuration

标识一个类作为配置类。配置类通常用于定义应用程序的 bean 配置信息,结合 @Bean 使用。

Spring 容器会在应用程序启动时自动扫描该类,读取配置信息,并将其注册为 Spring 容器中的一个 bean。

组合注解,@Component

less 复制代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    // 元注解,用于确保value属性在 @Configuration 上的别名与 @Component 上的value属性保持一致
    @AliasFor(annotation = Component.class)
    String value() default "";
    
    boolean proxyBeanMethods() default true;
}

@Bean

将一个方法的返回值注册为一个 bean

@ComponentScan

在对应包路径下寻找被@Component及其衍生注解(如@Service@Repository@Controller等)标记的类,并将它们注册为Spring容器中的bean。

@Import

用于在配置类中导入其他的配置类或组件。

会将被导入的配置类或组件纳入当前配置类的上下文中,使得被导入的类中定义的 bean 或配置信息也能够被当前配置类所使用

Bean 扫描顺序

不同的bean声明方式不同的加载时机: @ComponentScan > @Import > @Bean

  • @Component 及其子注解申明的 bean 是按照字母顺序加载的
  • @Configuration + @bean 是按照定义的顺序依次加载的
  • @Import 的顺序,就是 bean 的加载顺序

同一类中加载顺序:Constructor >> @Autowired >> @PostConstruct >> @Bean

@DependsOn

用于指定Bean之间的依赖关系。

当一个 Bean A 被标记为@DependsOn("B"),它表示该 Bean A 依赖于另一个名为 "B" 的 Bean。在 Spring 容器初始化时,确保在初始化 A 之前,依赖的 B 已经初始化。

条件注解:用于基于特定条件来决定是否应该创建或启用一个Bean或配置

@ConditionalOnClass

当类路径中存在指定的类时,该条件才会成立。用于检查类是否存在

@ConditionalOnMissingClass

当类路径中不存在指定的类时,该条件才会成立。用于检查类是否不存在。

@ConditionalOnBean

当容器中存在指定的Bean时,该条件才会成立

@ConditionalOnMissingBean

当容器中不存在指定的Bean时,该条件才会成立。

@ConditionalOnProperty

当指定的配置属性存在并且值匹配时,该条件才会成立。

@ConditionalOnExpression

根据SpEL表达式的结果来决定条件是否成立。

@ConditionalOnSingleCandidate

基于候选 Bean 的数量来决定是否应该创建或配置 Bean,当有且仅有一个该类型的 Bean 可以自动装配时,条件才成立。

@Primary

用于解决依赖注入时的歧义性问题。当注入具有相同依赖类型的 Bean 时,Spring 会优先选择带有@Primary注解的Bean

@Order

用于指定Bean的加载顺序。

可以在Bean类上或Bean方法上使用。如果应用在Bean类上,它将影响该类中所有Bean方法的加载顺序

数值越小,加载顺序越早。数值相同,则不确定顺序

默认情况下,Bean的@Order 值为Ordered.LOWEST_PRECEDENCE,表示最低优先级

@ConfigurationProperties

用于将外部属性(通常从属性文件如application.properties或application.yml中读取)绑定到 Java 对象的字段或属性上

@EnableConfigurationProperties

告诉Spring Boot 通过 @ConfigurationProperties 注解来将外部配置文件(如application.properties或application.yml)中的属性值绑定到特定的 Java 类,以便在应用程序中使用这些配置值

相关推荐
吃面不喝汤662 小时前
Flask + Swagger 完整指南:从安装到配置和注释
后端·python·flask
讓丄帝愛伱3 小时前
spring boot启动报错:so that it conforms to the canonical names requirements
java·spring boot·后端
weixin_586062023 小时前
Spring Boot 入门指南
java·spring boot·后端
凡人的AI工具箱9 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
是店小二呀9 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
canonical_entropy9 小时前
金蝶云苍穹的Extension与Nop平台的Delta的区别
后端·低代码·架构
我叫啥都行10 小时前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
无名指的等待71211 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
.生产的驴11 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
AskHarries12 小时前
Spring Boot利用dag加速Spring beans初始化
java·spring boot·后端