web-dev-qa-db-ja.com

Spring Frameworkの注釈を使用してBean名を設定することは可能ですか?

次のようなBeanがあります。

@Bean
public String myBean(){
    return "My bean";
}

私はそれを自動配線したい:

@Autowired
@Qualifier("myBean")
public void setMyBean(String myBean){
    this.myBean=myBean;
}

私のようなものが必要です:

@Bean(name="myCustomBean")

そのままの状態でBeanにカスタム名を使用することは可能ですか?すぐに使用できない場合、そのようなBeanを作成する方法は?

21
Alexandr

@ Componentの1つアノテーションを使用して、名前を設定できます。こちらが official docです。

@Service("myMovieLister")
public class SimpleMovieLister {
    // ...
}

これにより、simpleMovieListerではなくmyMovieListerというBeanが作成されます。

JavaConfigの場合これは、sing @Beanの例に適用されます。

2.2.6。 Beanの命名のカスタマイズ

デフォルトでは、JavaConfigは@ Beanメソッドの名前を結果のBeanの名前として使用します。ただし、この機能はBeanNamingStrategy拡張ポイントを使用してオーバーライドできます。

public class Main {
    public static void main(String[] args) {
        JavaConfigApplicationContext ctx = new JavaConfigApplicationContext();
        ctx.setBeanNamingStrategy(new CustomBeanNamingStrategy());
        ctx.addConfigClass(MyConfig.class);
        ctx.refresh();
        ctx.getBean("customBeanName");
    }
} 

============================

更新:

あなたが求めているのは既に利用可能 Springで 4.3.

デフォルトでは、構成クラスは結果のBeanの名前として@Beanメソッドの名前を使用します。ただし、この機能は、name属性を使用してオーバーライドできます。

@Configuration
public class AppConfig {

    @Bean(name = "myFoo")
    public Foo foo() {
        return new Foo();
    }

}