SpringBoot4.0新特性-BeanRegistrar

Spring 7.0引入了一种新的更方便更灵活的注册Bean的方式-BeanRegistrar。它是以编程方式根据条件动态做Bean的注入,并且可以一次注入多个Bean。

举个例子:

现在有一个EnvService,有2个实现类ProductionServiceNonProductionService

java 复制代码
public interface EnvService{
   String getEnv();
}
public class ProductionService implements EnvService{
    @Override
    public String getEnv() {
        return "Production";
    }
}
public class NonProductionService implements EnvService {
    @Override
    public String getEnv() {
        return "NonProduction";
    }
}

现在想实现:如果是生产环境就启用ProductionService,否则就启用NonProductionService,用BeanRegistrar如何来实现呢?

使用起来主要有2步:

  • BeanRegistrar接口实现
java 复制代码
public class EnvBeanRegistrar implements BeanRegistrar {
    @Override
    public void register(BeanRegistry registry, Environment env) {
        if(env.matchesProfiles("prod")){
            registry.registerBean("envService", ProductionService.class);
        } else {
            registry.registerBean("envService", NonProductionService.class);
        }
    }
}
  • @Import导入实现类
java 复制代码
@Configuration(proxyBeanMethods = false)
@Import(EnvBeanRegistrar.class)
public class BeanRegistrarConfig {
}
  • 测试一下
java 复制代码
@RestController
@RequestMapping("api/bean-registrar")
public class BeanRegistrarController {
    @Autowired
    private EnvBeanRegistrar.EnvService envService;
    @GetMapping(path = "/demo")
    public String demo() throws Exception{
        return envService.getEnv();
    }
}

可以切换spring.profiles.active测试不同的输出情况。

更多SpringBoot4.0的新特性,请参考:SpringBoot4.0新特性

相关推荐
咩咩啃树皮37 分钟前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚1 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白3 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司3 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地4 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun3141594 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风7 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z123456789867 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin5211238 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
做个文艺程序员8 小时前
Linux第24篇:Java应用监控体系搭建:Prometheus+Grafana可视化运维
java·grafana·prometheus