Google Guice提供了一些强大的依赖注入功能。
我最近遇到了@Nullable功能,允许你将构造函数参数标记为可选(允许null),因为Guice默认不允许这些:
例如
public Person(String firstName,String lastName,@Nullable Phone phone) { this.firstName = checkNotNull(firstName,"firstName"); this.lastName = checkNotNull(lastName,"lastName"); this.phone = phone; }
没有一个意图被隐藏,但这些是我最喜欢的“奖金功能”在Guice:
> Guice可以inject a TypeLiteral<T>,有效地消除擦除。
> TypeLiteral可以做generic type resolution:这告诉你在List< String>上的get()返回一个迭代器< String> ;.
> Types是Java通用类型接口实现的工厂。
> Grapher可视化喷油器。如果您的定制提供程序实现HasDependencies,它可以扩充此图。
> Modules.override()是一个令人难以置信的方便。
>用于定义参数化键的简短语法:new Key< List< String>>(){}。
> Binder.skipSources()允许您编写其错误消息正确跟踪行号的扩展。
> The SPI. Elements.getElements()将一个模块分解成原子,Elements.getModule()将它们放回一起。>如果在模块中实现equals()和hashCode(),您可以多次安装该模块,没有问题。