Spring Style Decouple : Decouple « Spring « Java Tutorial






File: helloworld-context.properties

source.(class)=SimpleMessageData
destination.(class)=StdoutMessageReporter

File: Main.java

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[] a) {
    DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
    BeanDefinitionReader reader = new PropertiesBeanDefinitionReader(bf);
    reader.loadBeanDefinitions(new ClassPathResource("helloworld-context.properties"));

    MessageData source = (MessageData) bf.getBean("source");
    MessageReporter destination = (MessageReporter) bf.getBean("destination");

    destination.write(source.getMessage());
  }
}
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 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-SpringStyleDecouple.zip( 2,600 k)








28.1.Decouple
28.1.1.Spring Style Decouple
28.1.2.Decouple With Interface
28.1.3.Closed Coupled