在服务层使用静态方法有什么坏处?

2024-04-23

我知道这不是最好的设计,而只是 Spring 新手的一个想法。

现在我们可以轻松地autowireSpring框架中可以方便地相互调用任何服务方法。但是创建服务类的静态工厂方法并到处调用它有什么缺点呢?

像这样的情况很常见:

@Autowired
CustomerService customerService;

....
AccountDetail ad = customerService.getAccountDetail(accountId, type);

但这也应该有效:

// If we make getAccountDetail(String, String) static:
AccountDetail ad = CustomerService.getAccountDetail(accountId, type);

那么为什么会有autowire这样的设计呢?它看起来很奇特而且很酷,但是其背后的工作仍然是在另一个服务对象上创建一个服务 bean 实例。

说真的,虽然春天遍布市场,但很多帖子和文章都在谈论优点和翻新。但它能保证更好的性能(比如使用自动装配而不是静态)吗?


原因有很多:

  • 你无法替代CustomerService在测试期间轻松进行模拟(除了 PowerMock 等工具)

  • static方法不参与标准的、基于代理的 AOP(无事务、安全性、自定义方面)

  • 你不能再使用花哨的注入技术,比如将 HTTP 请求(请求范围)注入到单例范围服务中(无论如何,设计很糟糕,但是......)

但完整来说,还有一些优点:

  • static方法实际上更接近您的意图,Spring bean 很少有状态,因此它们实际上并不需要实例来工作

  • static调用可能会更快(这与 99% 的程序无关)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在服务层使用静态方法有什么坏处? 的相关文章

随机推荐