@Configuration
public class MyConfig {
@Bean(name = "myObj")
public MyObj getMyObj() {
return new MyObj();
}
}
我有@Configuration Spring注释的MyConfig对象。 我的问题是如何以编程方式(在常规类中)检索bean?
例如,代码段看起来像这样。 提前谢谢。
public class Foo {
public Foo(){
// get MyObj bean here
}
}
public class Var {
public void varMethod(){
Foo foo = new Foo();
}
}
答案 0 :(得分:8)
这是一个例子
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中已包含的文件。现在您只需按名称或类型获取一个bean:
ctx.getBean("someName")
请注意,有很多方法可以启动Spring - 使用ContextLoaderListener,@ Configuration类等。
答案 1 :(得分:7)
试试这个:
public class Foo {
public Foo(ApplicationContext context){
context.getBean("myObj")
}
}
public class Var {
@Autowired
ApplicationContext context;
public void varMethod(){
Foo foo = new Foo(context);
}
}
答案 2 :(得分:3)
如果您真的需要从ApplicationContext
获取bean,那么最简单(尽管不是最干净)的方法是让您的类实现ApplicationContextAware
接口并提供setApplicationContext()
方法。
一旦你有了ApplicationContext
的引用,你就可以访问许多将bean实例返回给你的方法。
缺点是这使得你的班级知道Spring语境,除非必要,否则应该避免。