Inversion Of Control (IoC) & Dependency Injection

What it is?

The services are not responsible for the instantiation of the components they depend on.

This architecture provides a loosely coupled design where the implementation of dependant services can be transparently exchanged.

This pattern has several names :

  • Hollywood principle : "don't call me, I will call you"
  • Inversion of Control
  • Dependency injection

How?

Not to let the object create itself the instances of the object it references. This job is delegated to the container (assembler in the picture).

ioc.gif

Injection

There are two ways to inject a dependency :

using a constructor

public ServiceA(ServiceB serviceB)

using setter methods

public void setServiceB(ServiceB serviceB)

When a client service can not be stored in the container then the service locator pattern is used

public ServiceA(){
          this.serviceB =Container.getSInstance().getService(ServiceB.class);
        }

Side effects

  • Ease Unit test (use of Mock objects)
  • Ease Maintainability
  • Ease Refactoring
  • Component reuse ( POJOs != EJBs)

Creator: Benjamin Mestrallet on 2007/05/22 14:11
Copyright (c) 2000-2009. Allright reserved - eXo platform SAS
1.6.13286