Loading...
Spring Framework Reference Documentation 7.0.2의 Programmatic Bean Registration의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Spring Framework 7부터는 프로그램 방식의 bean 등록에 대한 일급 지원이
BeanRegistrar
인터페이스를 통해 제공되며, 이를 구현하여 유연하고 효율적인 방식으로 bean을 프로그램 방식으로 등록할 수 있습니다.
이러한 bean registrar 구현체들은 일반적으로 @Configuration 클래스에 @Import 어노테이션으로 import됩니다.
1@Configuration 2@Import(MyBeanRegistrar.class) 3class MyConfiguration { 4}
1@Configuration 2@Import(MyBeanRegistrar::class) 3class MyConfiguration { 4}
type-level conditional 어노테이션들(
@Conditional, 그리고 그 외 변형들)을 활용하여 관련 bean registrar들을 조건부로 import할 수 있습니다.
bean registrar 구현체는 BeanRegistry와
Environment API를 사용하여 간결하고
유연한 방식으로 bean을 프로그램 방식으로 등록합니다.
예를 들어, if 표현식,
for 루프 등을 통한 커스텀 등록이 가능합니다.
1class MyBeanRegistrar implements BeanRegistrar { 2 3 @Override 4 public void register(BeanRegistry registry, Environment env) { 5 registry.registerBean("foo", Foo.class); 6 registry.registerBean("bar", Bar.class, spec -> spec 7 .prototype() 8 .lazyInit() 9 .description("Custom description") 10 .supplier(context -> new Bar(context.bean(Foo.class)))); 11 if (env.matchesProfiles("baz")) { 12 registry.registerBean(Baz.class, spec -> spec 13 .supplier(context -> new Baz("Hello World!"))); 14 } 15 registry.registerBean(MyRepository.class); 16 registry.registerBean(RouterFunction.class, spec -> 17 spec.supplier(context -> router(context.bean(MyRepository.class)))); 18 } 19 20 RouterFunction<ServerResponse> router(MyRepository myRepository) { 21 return RouterFunctions.route() 22 // ... 23 .build(); 24 } 25 26}
1class MyBeanRegistrar : BeanRegistrarDsl({ 2 registerBean<Foo>() 3 registerBean( 4 name = "bar", 5 prototype = true, 6 lazyInit = true, 7 description = "Custom description" 8 ) { 9 Bar(bean<Foo>()) // Also possible with Bar(bean()) 10 } 11 profile("baz") { 12 registerBean { Baz("Hello World!") } 13 } 14 registerBean<MyRepository>() 15 registerBean { 16 myRouter(bean<MyRepository>()) // Also possible with myRouter(bean()) 17 } 18}) 19 20fun myRouter(myRepository: MyRepository) = router { 21 // ... 22}
Bean registrar들은 Ahead of Time Optimizations를 사용하여 지원되며, 인스턴스 supplier들이 사용되는 경우를 포함하여 JVM 또는 GraalVM 네이티브 이미지에서 모두 지원됩니다.
Composing Java-based Configurations
Environment Abstraction