Spring Style Decouple
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; } }
1. | Closed Coupled | ||
2. | Decouple With Interface | ||
3. | Spring Prototype |