下面列出了怎么用com.google.inject.spi.DefaultBindingScopingVisitor的API类实例代码及写法,或者点击链接到github查看源代码。
private boolean isSingleton(Binding<?> b) {
return b.acceptScopingVisitor(new DefaultBindingScopingVisitor<Boolean>() {
@Override
public Boolean visitEagerSingleton() {
return Boolean.TRUE;
}
@Override
public Boolean visitScope(Scope scope) {
return Scopes.SINGLETON.equals(scope);
}
@Override
protected Boolean visitOther() {
return Boolean.FALSE;
}
});
}
@Override
protected void configure() {
binder().bindListener(Matchers.any(), new ProvisionListener() {
@Override
public <T> void onProvision(ProvisionInvocation<T> provision) {
final Binding<T> binding = provision.getBinding();
logger.debug("provisioning {}", binding.getKey().getTypeLiteral());
final T provisioned = provision.provision();
if (provisioned != null && Service.class.isAssignableFrom(provisioned.getClass())) {
final AtomicBoolean start = new AtomicBoolean(false);
binding.acceptScopingVisitor(new DefaultBindingScopingVisitor<T>() {
@Override
public T visitEagerSingleton() {
start.set(true);
return super.visitEagerSingleton();
}
@Override
public T visitScope(Scope scope) {
if (scope instanceof SingletonScope) {
start.set(true);
}
return super.visitScope(scope);
}
});
if (start.get()) {
serviceList.push(binding.getKey().getTypeLiteral().getRawType());
try {
logger.debug("starting {}", binding.getKey().getTypeLiteral());
((Service) provisioned).start();
} catch (Exception e) {
throwIfUnchecked(e);
throw new RuntimeException(e);
}
}
}
}
});
}