选择必须使用哪种服务实现的最优雅方式是什么?

时间:2015-03-11 19:18:16

标签: java spring design-patterns encapsulation

在我的控制器中,我需要选择我需要在spring上使用的服务实现。在我将这个代码封装到工厂之前,我认为这不是一个好的做法......

@Component
public class StoreServiceFactory {

    @Autowired
    private List<StoreService> storeServices;

    public StoreService getService(){

        if(isActiveSale){
            return storeServices.get("PublicStoreService")
        }

        return storeServices.get("PrivateStoreService")
    }
}

所以我想把这个行为封装起来不关心我的控制器内部..我怎么能得到它?

2 个答案:

答案 0 :(得分:0)

如果isActiveSale在应用程序运行时发生变化,我认为你得到的是一个很好的解决方案。由于控制器是单独的,因此每次该值改变时,您都不能期望注入不同的注射。 如果仅在应用程序启动时获取值(例如,从某个属性获取),则可以使用配置文件。

答案 1 :(得分:0)

工厂没有任何问题,尽管@ R4J在评论中指出它更像是一个提供者,因为它没有实例化任何东西。如果&#39; isActiveSale&#39;我认为工厂/供应商是一个不错的选择。状态根据当前控制流之外的内容而更改,如属性文件中的配置。在某个管理屏幕中设置的设置,或者可能基于一天中的时间。

相关问题