IoC想到的.
Inversion of Control
--Dependency Lookup
--Dependency Injection
--Setter Injection
--Constructor Injection
控制反转的一般表示形式.
依赖注入. 由外部框架管理对象之间的依赖关系.查找资源的逻辑从应用代码中抽取出来,交由框架容器负责.
依赖查找. 一般由工厂对象,如对象注册表.通过键名查找服务对象. JNDI,手动使用BeanFactory, 自己管理的工厂对象.
接口回调. 上面两种的服务一般都是业务对象之间的依赖关系,而接口回调更多的是与框架,容器的交互. 客户代码实现框架,容器预留的接口, 运行时,框架容器调
用扩展代码,将对象注入. Servlet接口,注入的HttpRequest,HttpResponse对象. Spring的BeanFactoryAware注入的BeanFactory对象,ServletContextAware注入
的ServletContext, Struct2的 ServletContextAware 等等这些对象生命周期的回调接口. 实现回调接口的目的一般都是使用接口注入的服务对象,也有命令式的回调
接口,如Spring的InitializingBean 和 DisposableBean.
不同的反转形式,并不是要消除掉它们的依赖关系,而是使它们的依赖关系更简单,职责更清晰,每个类的任务更明确.而不是在一个业务对象里充满了查询其它对象
的代码,它们的问题不在同一水平线上,至少业务逻辑和查找逻辑不应在同一类里,使用Extract Class将查找对象的逻辑分离出去.这三种形式的基本设计作法都应该
使用接口将实现代码进行隔离.