Setter Dependency Injection Demo : Dependency Injection « Spring « Java Tutorial






File: context.properties

source.(class)=SimpleMessageData
destination.(class)=StdoutMessageReporter
service.(class)=DefaultMessageService
service.source(ref)=source
service.destination(ref)=destination

File: Main.java

import java.util.HashSet;
import java.util.Set;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionReader;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.PropertiesBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;

public class Main {

  public static void main(String[] args) throws Exception {
    DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
    BeanDefinitionReader reader = new PropertiesBeanDefinitionReader(bf);
    reader.loadBeanDefinitions(new ClassPathResource("context.properties"));

    MessageService service = (MessageService) bf.getBean("service");

    DependantComponent dc = new DependantComponent();
    dc.setService(service);
    dc.run();

  }

  private static Set<ManagedComponent> components = new HashSet<ManagedComponent>();

  private static void allowComponentsToLookup(BeanFactory bf) {
    for (ManagedComponent component : components) {
      component.lookup(bf);
    }
  }

  private static void registerComponent(ManagedComponent managedComponent) {
    components.add(managedComponent);
  }
}
class DependantComponent {
  private MessageService service;

  public DependantComponent() {
  }

  public void setService(MessageService service) {
      this.service = service;
  }

  public void run() {
      this.service.execute();
  }
}
class MessageServiceComponent implements ManagedComponent {
  private MessageService service;

  public void lookup(BeanFactory container) {
    this.service = (MessageService) container.getBean("service");
  }

  public void run() {
    this.service.execute();
  }
}


interface MessageService {

  void execute();

}

class DefaultMessageService implements MessageService {
  private MessageData source;

  private MessageReporter destination;

  public void execute() {
    this.destination.write(this.source.getMessage());
  }

  public void setSource(MessageData source) {
    this.source = source;
  }

  public void setDestination(MessageReporter destination) {
    this.destination = destination;
  }
}

interface ManagedComponent {

  void lookup(BeanFactory container);

}

interface MessageReporter {

  void write(String message);

}

interface MessageData {

  String getMessage();

}

class StdoutMessageReporter implements MessageReporter {

  public void write(String message) {
    System.out.println(message);
  }
}

class SimpleMessageData implements MessageData {
  private final String message;

  public SimpleMessageData() {
    this("Hello, world");
  }

  public SimpleMessageData(String message) {
    this.message = message;
  }

  public String getMessage() {
    return this.message;
  }
}
  Download:  Spring-SetterDependencyInjectionDemo.zip( 2,603 k)








28.8.Dependency Injection
28.8.1.Dependency Pull Demo
28.8.2.dependency check Demo
28.8.3.Contextualized Dependency Lookup Demo
28.8.4.Spring bean dependency Demo
28.8.5.Setter Dependency Injection Demo
28.8.6.Dependency Injection Demo