web-dev-qa-db-ja.com

プログラムでBeanを取得する

@Configuration
public class MyConfig {
    @Bean(name = "myObj")
    public MyObj getMyObj() {
        return new MyObj();
    }
}

このMyConfigオブジェクトには@Configuration Springアノテーションが付いています。私の質問は、(通常のクラスで)プログラムでBeanを取得する方法です。

たとえば、コードスニペットは次のようになります。前もって感謝します。

public class Foo {
    public Foo(){
    // get MyObj bean here
    }
}

public class Var {
    public void varMethod(){
            Foo foo = new Foo();
    }
}
15
user800799

ここに例

public class MyFancyBean implements ApplicationContextAware {

  private ApplicationContext applicationContext;

  void setApplicationContext(ApplicationContext applicationContext) {
    this.applicationContext = applicationContext;
  }

  public void businessMethod() {
    //use applicationContext somehow
  }

}

ただし、ApplicationContextに直接アクセスする必要はほとんどありません。通常、一度起動すると、Beanに自動的にデータが入力されます。

どうぞ:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

ApplicationContext.xmlに既に含まれているファイルについて言及する必要はないことに注意してください。これで、名前またはタイプごとに1つのBeanを取得できます。

ctx.getBean("someName")

ContextLoaderListener、@ Configurationクラスなどを使用して、Springを起動する方法がたくさんあることに注意してください。

8
Xstian

これを試して:

public class Foo {
    public Foo(ApplicationContext context){
        context.getBean("myObj")
    }
}

public class Var {
    @Autowired
    ApplicationContext context;
    public void varMethod(){
            Foo foo = new Foo(context);
    }
}
7
Peter Rader

ApplicationContextからBeanを実際に取得する必要がある場合の最も単純な(最もクリーンではない)アプローチは、クラスにApplicationContextAwareインターフェイスを実装させ、setApplicationContext()メソッドを提供することです。

ApplicationContextへの参照を取得すると、Beanインスタンスを返す多くのメソッドにアクセスできます。

欠点は、これによりクラスがSpringコンテキストを認識できるようになることです。これは、必要でない限り避ける必要があります。

4
Jim Garrison