Now some of you may be wondering what the big deal is with SCA using the dependency injection pattern. Dependency injection has been around since quite some time now. There is a lot of content explaining DI, its roots in earlier Inversion of Control (IoC) pattern, etc, on the web. Many proprietary, standards-based as well as open source component frameworks have been using the DI pattern explicitly in their architecture. For example, an EJB that invokes other EJBs in its implementation uses ejb-ref and ejb-local-ref elements in the deployment descriptor for encoding these dependencies. The deployer of the EJB can inject dependencies by appropriately setting the values for these references. Similarly, the Servlet 2.5 specification uses resource-ref, resource-env-ref and message-destination-ref elements to allow injection of resources such as datasources, JMS administered objects, etc. So in essence, as far as the use of the DI pattern itself is concerned, yes, I would agree that SCA perhaps is no different! However there are certain aspects of SCA that combine the benefits of DI and SCA in a unique manner including: - SCA embodies the DI pattern and provides a foundation for combining different existing component frameworks into one overall SCA framework. SCA allows a variety of resources such as Web services, EIS functions, remote EJBs to be modeled as remote components, and can generally be used without regard to the underlying implementation technology or of the transport. The DI feature of SCA is therefore neutral to the component implementation technology unlike the DI feature in the existing component frameworks out there today. - Via its assembly model comprising of elements with increasing composition granularity such as components, modules and subsystems, SCA provides multiples points of injecting dependencies that are suitable to different roles involved in developing, deploying and administering components. - I am not a big fan of this feature yet, but SCA seems to build upon DI to enable additional semantics such as publish/subscribe or aggregation of external services that a component depends upon. For example, a component reference that identifies a point of dependency injection of services with multiplicity of 0..n can be used to model a publish/subscribe semantics whereby many injected services can receive the same message from the component but the component can operate without any injected services as such. Similarly, a multiplicity of 1..n for dependency injection can be used by the component to invoke multiple external services and aggregate the results from all the services. Note that in both the cases of multiplicities, it is the user of the component implementation who gets to decide what the dependent services are and the component developer is only tasked with ensuring that all the points of dependency injections are properly exposed . In essence, use of DI in SCA seems right-on-spot and further enhances the benefits of DI by allowing injection of services from heterogeneous component environments, by allowing multiple points of service injection in a well specified manner and also by building upon the DI pattern to create additional semantics.