情况是这样的
- 第一步:你学会了面向接口编程。
- 第二步:如何实例化接口呢?你学会了工厂。
- 第三步:你学会了万能的工厂:IOC。
- 第四步:IOC 容器都提倡依赖注入,因此你也学会了。
- 第五步:无状态的类型的生命周期被有状态的类型给绑架了。
无状态的类型的生命周期被有状态的类型给绑架了
企业应用中,大多数的类型都是无状态的,如:Controller、ApplicationService、DomainService、Repository,只有个别的对象才有状态,如:UnitOfWork。因为依赖的问题,按照传统的依赖注入方式设计这些类型,生命周期设置只能设置为最短的那个(木桶定理),第一次发现这种要求,让我很不爽,当时没有敢于违背这种做法,直到读过一些 JSP 和 Spring 的书,才坚定了我的信心,因为:JSP 的 Servlet 是单例的,Spring 默认管理的实例也是单例的。
假如我们把无状态的对象设置为单例,有状态的对象该如何管理呢?答案很简单:
- 如果还是保留无状态到有状态的关联,引入一层抽象。
- 去掉无状态到有状态的关联,采用函数调用级别的依赖(服务定位器)。
好处
本该如此,看着更爽了,AOP 可以使用的更广泛了,因为其成本低了。