Comments 3
Круто! Полезная статья и вопрос рассмотрен очень глубоко в мельчайших деталях.
0
Не лишним был бы пример для Guice. Это будет выглядеть примерно так (пример не полон, например, отсутствует очистка контекста):
Биндинги — аннотацией на классе, либо через модуль (метод configure)
public class ThreadScope implements Scope {
static final Object NULL = new Object();
@Override
public <T> Provider<T> scope(Key<T> key, final Provider<T> unscoped) {
return new Provider<T>() {
final ThreadLocal<T> storage = new ThreadLocal<T>();
@Override
@SuppressWarnings("unchecked")
public T get() {
T obj = storage.get();
if (obj == null) {
obj = unscoped.get();
storage.set(obj != null ? obj : (T) NULL);
}
return obj == NULL ? null : obj;
}
};
}
}
public class ThreadScopeBindingModule extends AbstractModule {
@Override
protected void configure() {
ThreadScope scope = new ThreadScope();
bindScope(ThreadScoped.class, scope);
}
}
Биндинги — аннотацией на классе, либо через модуль (метод configure)
bind(SomeInterface.class).toProvider(SomeImplementationProvider.class).in(ThreadScoped.class);
0
Sign up to leave a comment.
Создание Custom Scope в JEE и Spring