Spring boot 系统学习 第二章 基于条件的自动配置

本文深入探讨了Spring Boot的条件自动配置机制,包括如何自定义条件注解和使用系统内置的条件注解。通过示例展示了如何根据系统属性、已存在的Bean和类存在情况来决定Bean的创建。文章以具体的代码示例解释了@Conditional、@ConditionalOnProperty、@ConditionalOnBean和@ConditionalOnClass的用法,并提供了启动Spring Boot应用后检查配置效果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.自定义条件的自动装配,需要配合@Conditional注解和Condition接口的实现类一起使用。

二.系统已经存在的一些Conditional条件注解,

具体使用如下所示:

1.Condition接口的实现类

public class UTFCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding=System.getProperty("file.encoding");
        if("UTF-8".equals(encoding)) {
            return true;
        }
        return false;
    }

}

public class GBKCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding=System.getProperty("file.encoding");
        if("GBK".equals(encoding)) {
            return true;
        }
        return false;
    }

}
2.使用自定义的condition条件和使用系统存在的condition条件

@SpringBootConfiguration
public class SpringConfiguration {
    @Bean
    @Conditional(GBKCondition.class)
    public Runnable createRunnable0() {
        return ()->{};
    }
    
    @Bean
    @Conditional(UTFCondition.class)
    public Runnable createRunnable1() {
        return ()->{};
    }
    
    @Bean
    @ConditionalOnProperty(name="local.port",havingValue="8080",matchIfMissing=true)//根据name属性的值和havingValue的值进行比较,如果相等则加载对应的bean,matchIfMissing不存在对应的属性则创建对应的bean
    public Runnable createRunnable2() {
        return ()->{};
    }
    
    @Bean
    @ConditionalOnBean(name="user")//判断对应name名字的bean是否存在,如果存在则创建此createRunnable3的bean,@ConditionalOnMissingBean于此相反
    public Runnable createRunnable3() {
        return ()->{};
    }
    
    @Bean
    @ConditionalOnClass(name="com.example.demo.User2") //判断根据对应name名字对应路径的类是否存在,如果存在则创建此createRunnable4的bean,ConditionalOnMissingClass于此相反
    public Runnable createRunnable4() {
        return ()->{};
    }
}

3.启动spring boot查看对应的类是否存在

   ConfigurableApplicationContext context=SpringApplication.run(DemoApplication.class, args);
   System.out.println(System.getProperty("file.encoding"));
   System.out.println(context.getBeansOfType(Runnable.class));

### 使用STM32CubeMX配置RTC(实时时钟) #### 配置概述 为了成功配置STM32微控制器上的RTC模块,需借助STM32CubeMX工具完成初步设置。此过程涉及多个方面,包括但不限于时钟源的选择、初始化参数设定以及必要的中断使能。 #### RTC时钟源选择 在STM32CubeMX界面内,当涉及到RTC配置时,可以选择不同的时钟源来驱动RTC工作。通常情况下,默认选用的是LSE (Low Speed External),即外部低速晶体振荡器,频率为32.768kHz[^3]。然而,对于某些特定型号如STM32G系列,则可能支持使用LSI (Low Speed Internal)作为替代方案,其典型频率约为32kHz。需要注意的是,在选择内部振荡器的情况下,用户应当自行调整相应的预分频系数以匹配所需的精度需求。 #### 中断与唤醒功能启用 为了让RTC具备定时触发事件的能力,比如每秒钟产生一次中断信号用于更新时间戳或是执行周期性的任务处理逻辑,必须确保已正确启用了对应的中断选项。这一步骤至关重要,因为只有这样才能够保证后续程序能够响应由RTC发出的时间脉冲而采取行动[^4]。 #### 实际操作指南 1. 打开STM32CubeMX软件并导入目标MCU型号; 2. 导航至“Clock Configuration”页面调整系统与时钟树结构,确保选择了合适的RTC时钟源(LSE/LSI)[^2]; 3. 切换到“Peripherals”标签页找到RTC组件,并勾选Enable复选框激活该外设; 4. 如果计划利用RTC产生的溢出或报警条件发起硬件级的CPU唤醒请求,则还需进一步确认WakeUp Pin及有关IRQ通道已被适当配置[^5]; 5. 对于希望实现更精细控制的应用场景而言,可以考虑自定义ASYNCH_PRESCALER和SYNCH_PREDIVIDER两个寄存器中的数值,从而精确调控RTC计数速率; 6. 完成上述所有步骤之后保存项目文件并通过生成代码向导创建适用于所选平台的基础框架工程; ```c // 示例:初始化RTC并开启秒级别中断 HAL_StatusTypeDef status; status = HAL_RTC_Init(&hrtc); if(status != HAL_OK){ // 错误处理... } __HAL_RCC_RTC_ENABLE(); __HAL_RTC_SECOND_IT_ENABLE(&hrtc); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值