代码之家  ›  专栏  ›  技术社区  ›  Steve B.

弹簧初始化错误的影响

  •  3
  • Steve B.  · 技术社区  · 17 年前

    我正在使用一个构建不正确的spring应用程序。需要引用的对象不是使用IOC,而是从上下文中提取其引用:

        BeanFactory b = SingletonBeanFactoryLocator.getInstance().
                   useBeanFactory("factory").getFactory();
        Bean foo = (FOO)beanFactory.getBean("foo");
    

    撇开非国际奥委会的设计不谈,这还有什么不利影响?例如,这是否有任何特定的性能影响?这是否会导致创建其他上下文或对象引用?这会导致其他任何不愉快的事情吗?

    3 回复  |  直到 17 年前
        1
  •  1
  •   krosenvold    17 年前

    我想到了一句老话“你可以用任何语言编写fortran”。使用spring作为服务定位器听起来像是您错过了让spring变得漂亮的大多数东西。Spring也不是一个很好的服务定位器。这也使得进行单元测试变得更加困难,因为您失去了一些非常好的松散耦合。(您正以这种方式拧紧联轴器)

    在我看来,光是这些论点就足以成为转换的理由。我甚至都不会开始谈论性能,其他人已经指出,除非你处于一些紧张的循环中,否则不太可能。

    从好的方面来说,您可能真的很容易转换为spring注释,这可能是您代码的原始作者没有执行“正确”spring的原因;他不喜欢所有的xml。对于注释,您不需要所有这些xml。

        2
  •  1
  •   Esko    17 年前

    直接想到的一个可能的问题是,如果在函数方法中使用该代码,而不是在某些初始化方法中使用该代码,那么bean会被大量重新获取,这很可能会减慢速度。

    这也不是真正可维护的,如果bean的名称被更改,那么对它的所有引用都必须手动更新,否则什么都不起作用。这当然扩展到依赖于其他bean的bean,甚至那些bean也可能依赖于其他bean,比如DataSource as bean到用于非事务性数据库查询的公共JDBC模板,该模板被注入到通用容器类中,所有其他类从该容器类中获取此类对象。

        3
  •  1
  •   cliff.meyers    17 年前

    Spring提供的任何其他特性(AOP、作用域bean等)无论对象是注入还是从容器中获取,其行为都将是相同的。