Wednesday, 14 March 2018

IOC Vs DI

IOC Inversion of control: If someone else is creating the objects for us rather than we are creating using new Object and we can call that some one as IOC container. i.e IOC container will take the part of creating Objects which we needed. As object is inverted we are calling it is Inversion of Control. It is not programmer, some one else who controlling the object.

If we consider Spring framework, Spring IOC will take of Bean creations.

Dependency Injection: We normally hardcode the dependency as shown below.

package com.sample.java.testing;

public class DependentObjectTest {

    DependencyObjectTest dependentObjectTest;
   
    DependentObjectTest(){
        dependentObjectTest = new DependencyObjectTest();//tight coupling
    }

}

DI is nothing but injecting the dependency rather than hardcoding it. WE can inject the dependency either  setter method and constructor.

Constructor Injection:

package com.sample.java.testing;

public class DependentObjectTest {

    DependencyObjectTest dependentObjectTest;
   
       DependentObjectTest(DependencyObjectTest dependentObjectTest){
        this.dependentObjectTest = dependentObjectTest;       
    }
}

Setter Injection:

package com.sample.java.testing;

public class DependentObjectTest {

    DependencyObjectTest dependentObjectTest;
   
     public DependencyObjectTest getDependentObjectTest() {
        return dependentObjectTest;
    }

    public void setDependentObjectTest(DependencyObjectTest dependentObjectTest) {
        this.dependentObjectTest = dependentObjectTest;
    }
     
}

Multi level dependecy: like class1 depends on class2 and classs2 is dependent on class3 etc.

package com.sample.java.testing;

public class DependencyObjectTest {
   
    public void printMessage(){
        System.out.println("DependencyObjectTest printMessage");
    }

}

package com.sample.java.testing;

public class Dependent1 {

    DependencyObjectTest dependencyObjectTest;
   
    Dependent1(DependencyObjectTest dependencyObjectTest){
        this.dependencyObjectTest =dependencyObjectTest;
    }
   
    public void printMessage(){
        System.out.println("Dependent1 printMessage");
        dependencyObjectTest.printMessage();
    }
}

package com.sample.java.testing;

public class Dependent2 {
   
    Dependent1 dependent1;
   
    Dependent2(Dependent1 dependent1){
        this.dependent1 = dependent1;
    }
   
    public void printMessage(){
        System.out.println("Dependent2 printMessage");
        dependent1.printMessage();
    }

}

package com.sample.java.testing;

public class Dependent3 {

    Dependent1 dependent1;
    Dependent2 dependent2;
   
    Dependent3(Dependent1 dependent1, Dependent2 dependent2){
        this.dependent1 = dependent1;
        this.dependent2 = dependent2;
    }
   
    public void printMessage(){
        System.out.println("Dependent3 printMessage");
        dependent1.printMessage();
        dependent2.printMessage();
    }
}

package com.sample.java.testing;

public class DependentDemoTest {

    public static void main(String[] args) {

        DependencyObjectTest dependencyObjectTest = new DependencyObjectTest();
        Dependent1 dependent1 = new Dependent1(dependencyObjectTest);
        Dependent2 dependent2 = new Dependent2(dependent1);
        Dependent3 dependent3 = new Dependent3(dependent1, dependent2);
        dependent3.printMessage();
    }

}

No comments:

Post a Comment