代码之家  ›  专栏  ›  技术社区  ›  brabster

如何在获取依赖关系的方法之间进行选择?

  •  4
  • brabster  · 技术社区  · 16 年前

    我见过至少三种在Java对象中获取依赖项的方法,而不必将对象与依赖项的创建相耦合;

    依赖注入 -一些框架基于外部配置将所需对象注入到另一个对象中,例如:Spring托管bean

    依赖查找 -类在某种目录服务中查找所需的依赖项,例如:javaee容器中的JNDI查找

    静态工厂 -全局范围内的对象按需提供实例—标准Java SE API似乎到处都是这些实例,例如: java.util.Logger.getLogger(name) , java.util.Calendar.getInstance()

    对于哪种情况最适合你,你能提供什么指导?

    3 回复  |  直到 16 年前
        1
  •  6
  •   duffymo    16 年前

    我更喜欢依赖注入,因为对象不需要知道如何获取所需的引用。

    依赖项查找仍然要求对象了解查找服务及其URL。

    静态工厂类似于查找服务。

        2
  •  2
  •   amra    16 年前

    我更喜欢 依赖注入 .

    当我谈到使用Spring框架的DI时,我看到了以下内容

    1. IDE(错误检查、可视化)支持它。
    2. 您可以设置其他需要的东西,如AOP,属性加载。。。
    3. 也可用于桌面应用程序。

    这些超过了所有的负面因素,比如对另一个库的依赖。为什么我要使用另一种方法?

        3
  •  1
  •   Adriaan Koster    16 年前

    这实际上取决于上下文。如果您正在编写一个自包含的数学API,那么您可能希望使用静态工厂,因为代码将不那么冗长,不需要设置,而且可能效率更高。如果您需要访问/提供远程依赖关系,那么JNDI/LDAP查找或ESB消息传递就可以很好地工作。为了将服务/DAO/数据源注入到典型的企业服务器代码中,最好使用一种常见的d.I.框架,如googleguice或Spring。