@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();
}
}
ここに例
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を起動する方法がたくさんあることに注意してください。
これを試して:
public class Foo {
public Foo(ApplicationContext context){
context.getBean("myObj")
}
}
public class Var {
@Autowired
ApplicationContext context;
public void varMethod(){
Foo foo = new Foo(context);
}
}
ApplicationContext
からBeanを実際に取得する必要がある場合の最も単純な(最もクリーンではない)アプローチは、クラスにApplicationContextAware
インターフェイスを実装させ、setApplicationContext()
メソッドを提供することです。
ApplicationContext
への参照を取得すると、Beanインスタンスを返す多くのメソッドにアクセスできます。
欠点は、これによりクラスがSpringコンテキストを認識できるようになることです。これは、必要でない限り避ける必要があります。