Inversion Of Control
1 Overview
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
2 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).
3 Injection
There are two ways to inject a dependency : using a constructor:public ServiceA(ServiceB serviceB)public void setServiceB(ServiceB serviceB)public ServiceA(){ this.serviceB =Container.getSInstance().getService(ServiceB.class); }
4 Side effects
- Ease Unit test (use of Mock objects)
- Ease Maintainability
- Ease Refactoring
- Component reuse ( POJOs != EJBs)
on 02/04/2009 at 11:47