Pico is more of a DI engine than a complete DI container/framework. You require some meta-layer to configure pico (hence the existence of nanocontainer). Off the top of my head pico does the following that guice does NOT:
- multicast
- lifecycle
- container chaining
- visitation (though arguably aop is this)
- container extensibility (dynamic rebinding among other things made possible)
guice does the following better (or more complete) compare with pico:
- aop
- scopes
- method/field injection
- module/configuration
- providers
- static injection
These are incomplete lists of course. Comparing pico and guice is unfair as Ive already stated guice is a full-fledged DI framework but pico is more of an internals "engine." One could conceivably use pico to build a DI container to guice's contract.
Feature-wise it looks as though pico tips the scales, but I think you'll find guice is more straightforward and better suited to client applications (pico better for embedding under the covers). Also hopefully,
guice1.1 will catch up some of those feature gaps =)
Dhanji.