实战中使用的策略模式,使用@ConditionalOnProperty实现根据环境注册不同的bean

文章介绍了SpringBoot中的@ConditionalOnProperty注解如何根据配置文件控制Bean的加载策略,如懒加载和预加载,以适应不同设备内存需求。通过配置文件管理策略选择,提高资源加载效率。
摘要由CSDN通过智能技术生成

 场景复现

举个例子,针对不同的设备的内存的不同加载一些资源的时候需要采取不同的策略,比如,在内存比较大的设备,可以一次性加载,繁殖需要使用懒加载,这个时候我们就可以采用配置文件+配置中心去控制了

 @ConditionalOnProperty

@ConditionalOnProperty是Spring Boot中的一个注解,它可以用来控制某个Bean的创建和激活。它的作用是通过读取配置文件中的属性值来决定是否创建或激活某个Bean。当配置文件中的属性值与@ConditionalOnProperty的要求相符时,才会创建或激活该Bean。

@ConditionalOnProperty有以下几个参数:

  • name:要检查的属性的名称;
  • havingValue:要检查的属性的值;
  • matchIfMissing:如果配置文件中没有该属性,是否匹配。

 代码

策略类的父接口

public interface LoadModelStrategy {

    void loadModel(List<Speaker> speakers);
}

策略类抽象类

public abstract class AbstractLoadModelStrategy implements LoadModelStrategy{

    public static boolean checkFileExist(String filePath) {
        return new File(filePath).exists();
    }
}

实现类

@Slf4j
public class LazyLoadModelStrategy extends AbstractLoadModelStrategy{
    @Override
    public void loadModel(List<Speaker> speakers) {
        log.info("懒加载");
    }
}
@Slf4j
public class PreloadedLoadModelStrategy extends AbstractLoadModelStrategy {

    @Override
    public void loadModel(List<Speaker> speakers) {
        log.info("立即加载");
    }
}

配置类

@Configuration
public class LoadModelConfig {

    @Bean
    @ConditionalOnProperty(name = "test.strategy",havingValue = "lazy")
    public LoadModelStrategy lazyLoadModelStrategy(){
        return new LazyLoadModelStrategy();
    }

    @Bean
    @ConditionalOnProperty(name = "test.strategy",havingValue = "preloaded")
    public LoadModelStrategy preloadedLoadModelStrategy(){
        return new PreloadedLoadModelStrategy();
    }
}

配置文件

test:
  strategy: preloaded

消费者 

@Slf4j
@Component
@ConfigurationProperties(prefix = "test")
public class InitConfig implements CommandLineRunner {

    @Resource
    private LoadModelStrategy loadModelStrategy;

    // 执行初始化逻辑
    @Override
    public void run(String... args) throws Exception {
        log.info("进入初始化方法");
        log.info("loadModelStrategy:{}", loadModelStrategy);
    }
}

效果展示

立即加载

懒加载 

  • 31
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值