跳到主要内容
版本:7.0.3

程序化Bean注册

Hunyuan 7b 中英对照 Programmatic Bean Registration

从Spring Framework 7开始,通过BeanRegistrar接口提供了对编程式bean注册的一级支持,该接口可以实现以灵活高效的方式编程式地注册bean。

这些bean注册器实现通常是在@Configuration类上使用@Import注解来导入的。

@Configuration
@Import(MyBeanRegistrar.class)
class MyConfiguration {
}
备注

你可以利用类型级条件注解(@Conditional)以及其他变体,来有条件地导入相关的bean注册器。

Bean注册器的实现使用了BeanRegistryEnvironment API,以简洁灵活的方式编程注册Bean。例如,它允许通过if表达式、for循环等进行自定义注册。

class MyBeanRegistrar implements BeanRegistrar {

@Override
public void register(BeanRegistry registry, Environment env) {
registry.registerBean("foo", Foo.class);
registry.registerBean("bar", Bar.class, spec -> spec
.prototype()
.lazyInit()
.description("Custom description")
.supplier(context -> new Bar(context.bean(Foo.class))));
if (env.matchesProfiles("baz")) {
registry.registerBean(Baz.class, spec -> spec
.supplier(context -> new Baz("Hello World!")));
}
registry.registerBean(MyRepository.class);
registry.registerBean(RouterFunction.class, spec ->
spec.supplier(context -> router(context.bean(MyRepository.class))));
}

RouterFunction<ServerResponse> router(MyRepository myRepository) {
return RouterFunctions.route()
// ...
.build();
}

}
备注

Bean注册器在提前优化中是受支持的,无论是在JVM上还是在GraalVM原生镜像上,包括在使用实例供应商时也是如此。