使用getBean检索作为范围原型的bean

时间:2013-02-20 04:56:03

标签: java spring dependency-injection inversion-of-control

我已阅读here使用被认为是applicationContext.getBean(“somebeananmehere”)的内容很糟糕。

如果是这样,我将如何以编程方式获取bean(取决于用户他想要什么样的bean,让我们说他可以选择不同的杂货项目,例如苹果,肥皂,洗涤剂)?

让我们说

switch(num){
  case 1 : myGrocery  = (GroceryItem) applicationContext.getBean("SOAP");break;
  case 2: myGrocery = (GroceryItem) applicationContext.getBean("APPLE");break;
  default:
   //more code here
}

这就是我在我的应用程序中所做的,用户正在选择他或她的杂货。 (这是一个控制台应用程序)

如果applicationContext.getBean被认为是坏的,那么替代方案是什么?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

检查

class Example {

  private SOAP soap;

  @Autowired
  public void setSoap(SOAP soap) {
    this.soap= soap;
  }

  private APPLE apple;

  @Autowired
  public void setApple(APPLE apple) {
    this.apple= apple;
  }


  public void yourMethod(int num) {
   switch(num){
    case 1 : myGrocery  = (GroceryItem) soap;break;
    case 2: myGrocery = (GroceryItem) apple;break;
    default:
     //more code here
    }
 }

}

答案 2 :(得分:0)

您可以使用spring的factory-method选项。只需编写工厂方法以返回正确的类和xml bean:

<bean factory-method="your factory method name" class="your class" />