Dependency Injection
by Jeremy Weiskotten

Example 1:

public interface Carpenter {
    Shelter getShelter();
}


Example 2:

public class TentCarpenter implements Carpenter {
    public Shelter getShelter() {
        return new Tent(); // class Tent implements Shelter
    }
}


Example 3: 

public class Relocater {
    private final Carpenter carpenter;
    public Relocater() {
        carpenter = new TentCarpenter();
    }
    public Shelter moveIntoNewDigs() {
        Shelter digs = carpenter.getShelter();
        return digs;
    }
}


Example 4: 

public Relocater(Carpenter carpenter) {
        this.carpenter = carpenter;
}

Example 5:

public class RelocaterTest extends TestCase {
    public void testMoveIntoNewDigs() {
        Relocater relocater = new Relocater(new MockCarpenter());
        Shelter shelter = relocater.moveIntoNewDigs();
        assertNotNull(shelter);
    }
}


Example 6:

public static Relocater getInstance() {
    Carpenter carpenter = new TentCarpenter();
    return new Relocater(carpenter);
}


Example 7:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC 
    "-//SPRING//DTD BEAN//EN" 
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="relocater" class="com.ddj.dependencyinjection.Relocater">
        <constructor-arg><ref bean="carpenter"/></constructor-arg>
    </bean>
    <bean id="carpenter" class="com.ddj.dependencyinjection.TentCarpenter"/>
</beans>


Example 8:

public static Relocater create() {
    ClassPathResource res = new ClassPathResource("beans.xml");
    XmlBeanFactory factory = new XmlBeanFactory(res);
    return (Relocater)factory.getBean("relocater");
}


Example 9:

public static Relocater getInstance() {
    Relocater relocater = new Relocater();
    relocater.setCarpenter(new TentCarpenter());
    return relocater;
}



2


