Spring - Singleton工厂实例化原型范围豆

时间:2017-05-09 11:44:50

标签: java spring

假设我有一个返回汽车对象的工厂CarFactory

class CarFactory {
      @Autowired
      ApplicationContext context;

      public Car get(String type) {
             if(type.equals("Merc")
                 return context.getBean(Merc.class);
             if(type.equals("Mclaren")
                 return context.getBean(Mclaren.class);
      }
}

有什么方法可以摆脱context.getBean吗?有人建议在工厂注入Merc和Mclaren并归还它们。但这意味着始终返回相同的对象。每次从工厂请求时我都需要创建新的Car对象

1 个答案:

答案 0 :(得分:4)

在SpringApplication中配置(或者命名您的配置类)以下bean:

@Bean
@Scope("prototype")
public McLaren mcLarenProtyoe() {
    return new McLaren();
}

对于Merc。

之后你可以通过@Autowired注入bean。并且由于@Scope("prototype") Spring每次创建新bean时都会创建它。