Mega Code Archive

 
Categories / Java Tutorial / Spring
 

Contextualized Dependency Lookup Demo

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; import org.springframework.util.Assert; 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"));     MessageServiceComponent msc = new MessageServiceComponent();     registerComponent(msc);     allowComponentsToLookup(bf);     msc.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 MessageServiceComponent implements ManagedComponent {   private MessageService service;   public void lookup(BeanFactory container) {     this.service = (MessageService) container.getBean("service");   }   public void run() {     this.service.execute();   } } class DependantComponent {   private MessageService service;   public DependantComponent(MessageService service) {     Assert.notNull(service, "The 'service' argument must not be null.");     this.service = 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;   } }