以编程方式检索 Bean

新手上路,请多包涵
@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();
    }
}

原文由 user800799 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 529
2 个回答

这是一个例子

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 类等。

原文由 Xstian 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试这个:

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

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

原文由 Grim 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题