假设我有一个工厂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对象

最佳答案

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

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


也适用于Merc。

之后,您可以通过@Autowired注入bean。而且由于@Scope("prototype")的缘故,Spring在每次请求新bean时都会创建一个。

10-05 18:33