This page has been created to compare containers supporting the Inversion Of Control pattern (see HollywoodPrinciple). This should help potential users to make an educated choice of various container and to better understand the existing products. ''Can we get a definition of what an inversion of control container is?'' A worthwhile overview - and proposed name change to DependencyInjection - can be found at http://martinfowler.com/articles/injection.html ''' -1. Relationally complete ''' ''' 0. Home page:''' * GoogleGuice - http://code.google.com/p/google-guice/ * PicoContainer - http://www.picocontainer.org/ * SpringFramework - http://www.springframework.org/ '''1. "Free" as in "free beer" - no license fee''' * GoogleGuice : Yes * PicoContainer : Yes * SpringFramework : Yes '''2. "Free" as in "free speech" - source available''' * GoogleGuice : Yes * PicoContainer : Yes * SpringFramework : Yes '''3. Has GUI ''' * GoogleGuice : No * PicoContainer : No * SpringFramework : Yes: SpringIde for EclipseIde. '''4. Has intrusive API''' (Components must implement or extend classes from the container API) * GoogleGuice : No * PicoContainer: No * SpringFramework : No '''5. Requires configuration in external files (XML or other)''' * GoogleGuice : No * PicoContainer: No, but it is possible via NanoContainer. * SpringFramework : No, but it is recommended via provided bean definition readers. '''6. Supports pluggable lifecycle interfaces''' * GoogleGuice : ? * PicoContainer: Yes, via component multicaster. * SpringFramework : Not out of the box, but Pico-style component multicaster could be implemented on top of Spring. '''7. Supports multiple instances of the same component class''' * GoogleGuice : No? * PicoContainer: Yes * SpringFramework : Yes '''8. Supports definition of dependencies and parameters via bean properties''' * GoogleGuice : ? * PicoContainer: Yes, but just all properties at once (keyed by introspection index). * SpringFramework : Yes, named properties, allowing for optional parameters. '''9. Supports definition of dependencies and parameters via bean constructors''' * GoogleGuice : ? * PicoContainer: Yes, multiple constructors possible. * SpringFramework : Yes, multiple constructors possible. '''10. Supports dynamic reconfiguration or hot swapping''' * GoogleGuice : ? * PicoContainer: Yes * SpringFramework : Yes, via AOP support '''11. Integrates with AOP for declarative services''' * GoogleGuice : ? * PicoContainer: Yes, using NanoContainer and Dynaop * SpringFramework : Yes '''12. Compatible with JDKs''' (may change with future releases, both as of February 12, 2005) * GoogleGuice : 1.5 and greater * PicoContainer: 1.3 and greater * SpringFramework : 1.3 and greater