このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Framework 6.2.7 を使用してください!

プログラムによる Bean 登録

Spring Framework 7 以降では、プログラムによる Bean 登録のファーストクラスのサポートが BeanRegistrar (Javadoc) インターフェースを介して提供され、これを実装することで、柔軟かつ効率的な方法で Bean をプログラムで登録できます。

これらの Bean レジストラ実装は通常、@Configuration クラスの @Import アノテーションを使用してインポートされます。

  • Java

  • Kotlin

@Configuration
@Import(MyBeanRegistrar.class)
class MyConfiguration {
}
@Configuration
@Import(MyBeanRegistrar::class)
class MyConfiguration {
}
型レベルの条件付きアノテーション ( @Conditional (Javadoc) だけでなく他のバリアントも) を活用して、関連する Bean レジストラを条件付きでインポートできます。

Bean レジストラ実装では、BeanRegistry (Javadoc) および Environment (Javadoc) API を使用して、簡潔かつ柔軟な方法でプログラム的に Bean を登録します。たとえば、if 式、for ループなどによるカスタム登録が可能になります。

  • Java

  • Kotlin

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!")));
        }
    }
}
class MyBeanRegistrar : BeanRegistrarDsl({
    registerBean<Foo>()
    registerBean(
        name = "bar",
        prototype = true,
        lazyInit = true,
        description = "Custom description") {
            Bar(bean<Foo>())
    }
    profile("baz") {
        registerBean { Baz("Hello World!") }
    }
})
Bean レジストラは、インスタンスサプライヤーが使用される場合を含め、JVM 上または GraalVM ネイティブイメージのいずれかで事前の最適化によってサポートされます。