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新特性

相关推荐
代码AI弗森12 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
Old Uncle Tom12 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
小小小米粒12 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
摇滚侠13 小时前
expdp 查看帮助
java·数据库·oracle
:12113 小时前
java基础
java·开发语言
曹牧14 小时前
Spring:@RequestMapping注解,匹配的顺序与上下文无关
java·后端·spring
daixin884814 小时前
cursor无法正常使用gpt5.5等模型解决方案
java·redis·cursor
韦禾水15 小时前
记录一次项目部署到tomcat的异常
java·tomcat
曦月合一15 小时前
树莓派安装jdk、tomcat、vnc、谷歌浏览器开机自启等环境配置
java·tomcat·树莓派
此剑之势丶愈斩愈烈16 小时前
openssl 自建证书
java