Guice: diferencias entre Singleton.class y @Singleton

En Guice, ¿cuál es la diferencia entre:

// Inside your AbstractModule subclass:
@Override
public void configure() {
    bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
}

Y:

@Override
public void configure() {
    bind(Service.class).to(ServiceImpl.class);
}

@Provides @Singleton
public ServiceImpl providesService() {
    return new ServiceImpl();
}

¿Son los dos iguales? ¿Cuándo usarías uno contra el otro? Gracias por adelantado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta