如果它有助于您将 Typhoon 与 Spring 进行比较,您可以将其TyphoonDefinition
视为 Spring bean:构造对象的蓝图,使用初始化程序,以及要调用的任何属性设置器或方法。
像 Spring 一样,您可以提供对另一个组件的引用或注入简单的配置。
同样,像 Spring 一样,您可以选择将相关组件组合在一起。
事实上,Typhoon 的内部模型与 Spring 非常相似,具有后处理器等(创始人——也就是我——是 Spring 框架的贡献者,曾在 SpringSource 工作过一段时间)。不同的是:
- Typhoon 程序集在构建时返回定义。
- 在运行时,装配接口用于返回构建的组件。这避免了使用“魔术字符串”
- 同样,对其他组件的引用也不需要“魔术字符串”——而是使用方法名称。
TyphoonDefinition
s 可以声明它们具有静态和运行时依赖项的混合,后者在程序集接口上声明。这提供了一种快速而强大的方式来实现工厂模式,并避免编写样板代码。
主要理由是允许 IDE 重构和代码完成,而无需构建额外的工具支持。
其他一些区别:
“按类型注入”(自动装配)仅可用于属性(ObjC 运行时不会为初始化程序或方法参数保留此信息)。
Typhoon 提供了一个专门为移动和桌面软件设计的默认范围。
您可能已经看到了一些示例,其中定义注入了程序集本身。这类似于 Spring 的 BeanFactoryAware,无需将您的代码显式耦合到 Typhoon(非侵入性)。它允许从一个对象图(例如视图控制器)到另一个对象图 - 这是移动和桌面应用程序中的常见要求。
最后,Spring 及其产品组合的基础一方面是“依赖注入”和“AOP”(用于事务管理、安全等)。此时 Typhoon 只做依赖注入,虽然我们觉得正式的 AOP 框架,用切入点表达语言会很有用。
Typhoon 的早期版本允许使用 Spring 样式的 XML,但是这在 Objectives-C 开发人员中并不是一个流行的特性。