极核getshell 2025-12-04 12:04 采纳率: 31.8%
浏览 4

Spring Boot的自动配置如何通过@ConditionalOnClass和@ConditionalOnProperty等条件注解实现按需加载? 如何自定义条件注解?

Spring Boot的自动配置如何通过@ConditionalOnClass和@ConditionalOnProperty等条件注解实现按需加载? 如何自定义条件注解?

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-12-04 12:24
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Spring Boot 自动配置按需加载

    Spring Boot 的自动配置机制允许根据特定条件自动加载配置类。通过使用 @Conditional 注解,可以实现按需加载。下面是如何使用 @ConditionalOnClass@ConditionalOnProperty 等条件注解:

    1. @ConditionalOnClass

    @ConditionalOnClass 注解用于检查类是否存在于类路径中。如果类存在,则条件为真。

    @Configuration
    @ConditionalOnClass({DataSource.class, HibernateJpaVendorAdapter.class})
    public class HibernateConfig {
        // ...
    }
    

    2. @ConditionalOnProperty

    @ConditionalOnProperty 注解用于检查属性是否存在或具有特定值。如果属性存在或具有特定值,则条件为真。

    @Configuration
    @ConditionalOnProperty(name = "spring.datasource.url", havingValue = "jdbc:mysql://localhost:3306/test")
    public class MySQLConfig {
        // ...
    }
    

    3. 自定义条件注解

    要自定义条件注解,可以创建一个新的注解类,并使用 @Conditional 注解的子类 @ConditionalOnBean@ConditionalOnClass@ConditionalOnExpression 等来实现自定义条件。

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Conditional(MyCustomCondition.class)
    public @interface MyCustomCondition {
        // ...
    }
    
    public class MyCustomCondition implements Condition {
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            // 自定义条件逻辑
            return true;
        }
    }
    

    总结

    通过使用 @Conditional 注解,可以实现按需加载 Spring Boot 的自动配置类。自定义条件注解可以通过创建一个新的注解类并实现 Condition 接口来实现。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月4日