Jon*_*Jon 27 dependency-injection guice
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;
}
Run Code Online (Sandbox Code Playgroud)
https://github.com/google/guice/wiki/UseNullable
Guice的其他有用功能(特别是不那么明显的)人们使用了什么?
Jes*_*son 39
它们都不是隐藏的,但这些是Guice中我最喜欢的'奖励功能':
Dan*_*tin 13
我喜欢如何完全开放的Scope
接口:基本上,它只是一个转变,从Provider
到Provider
.(好,由Key
和Provider
向Provider
)
希望有些东西基本上是Singleton,但每半小时从数据库重新读取一次?很容易为此做好准备.想在后台运行一些请求,并且有一个范围意味着"所有后台请求都是从同一个HTTP请求启动的?" 写它Scope
也相对容易.
想要Key
在测试期间对服务器上的某些内容进行范围调整,以便它为您从客户端运行的每个测试使用单独的实例?(测试在Cookie或额外的HTTP参数中传递测试ID)这很难做,但它完全有可能,所以有人已经为你写了.
是的,过度滥用Scope
将导致Jesse开始寻找赌注和大蒜丁香,但其惊人的灵活性可能非常有用.
dyr*_*oss 12
Guice的一个重要特性是它在任何方面实现方法拦截器是多么容易Module
,使用:
public void bindInterceptor(
Matcher<? super Class<?>> classMatcher,
Matcher<? super Method> methodMatcher,
MethodInterceptor... interceptors);
Run Code Online (Sandbox Code Playgroud)
现在,在该范围methodMatcher
内匹配的类中匹配的任何方法都被截获.classMatcher
Module
interceptors
例如:
bindInterceptor(
Matchers.any(),
Matchers.annotatedWith(Retryable.class),
new RetryableInterceptor());
Run Code Online (Sandbox Code Playgroud)
现在,我们可以简单地注释任何方法,如果失败@Retryable
,我们RetryableInterceptor
可以重试它.
归档时间: |
|
查看次数: |
4073 次 |
最近记录: |