![]() |
1
1
总结评论线索: 您的方法看起来像martin fowler在这里描述的服务定位器: http://martinfowler.com/articles/injection.html#InversionOfControl martin所描述的和您的代码有一个主要的区别:您的代码直接创建服务的实例,因此更像是一个工厂而不是一个注册表。 控制反转的基本思想/目标是通过减少依赖性来减少耦合,如果容器依赖于服务实现(它需要直接调用构造函数),则不会发生这种情况。所以你问题中的实现有点反对这个基本思想。 依赖于实现的缺点之一是,不必重新编译容器,就无法替换服务。如果您很可能永远不会有不同的实现,那么这可能不是问题,但是如果您可能需要它,一个服务 登记处 会更有用。 注册中心通常提供注册服务实现并根据请求交付服务实现的方法。这取决于您的需求,但它可能与发现的第一个实现一样简单,也可能更复杂,例如通过匹配一些参数(了解一些关于cdi注入点参数和替代方案的想法)。 注册表通常附带一些配置注册表的方法,例如通过配置文件或类路径扫描(自动查找存在的插件)。不过,编写一些配置注册表的代码也可能足够了。这完全取决于你需要摆脱什么样的耦合(以解决你面临的问题),以及什么样的耦合是可以接受的。 |