转载自:http://www.oschina.net/code/snippet_107039_5892

简易版Spring Ioc

   
   
   
   
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5. import java.util.Properties;  
  6.  
  7. /**  
  8.  * @author lei 2011-8-22  
  9.  *   
  10.  * 简单实现了一下Spring的IOC,理解IOC原理,多使用面向接口编程  
  11.  *   
  12.  */  
  13. public class BeanFactory {  
  14.  
  15.     private Map<String, String> beanDefinitions;  
  16.  
  17.     BeanFactory(String source) {  
  18.         this.register(source);  
  19.     }  
  20.  
  21.     public void register(String source) {  
  22.         InputStream in = this.getClass().getResourceAsStream(source);  
  23.         Properties p = new Properties();  
  24.         try {  
  25.             p.load(in);  
  26.             in.close();  
  27.             beanDefinitions = new HashMap<String, String>();  
  28.             for (Map.Entry<Object, Object> entry : p.entrySet()) {  
  29.                 beanDefinitions.put(entry.getKey().toString(), entry.getValue().toString());  
  30.             }  
  31.         } catch (IOException e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  
  35.  
  36.     public Object getBean(String name) {  
  37.         try {  
  38.             String value = beanDefinitions.get(name);  
  39.             return Class.forName(value).newInstance();  
  40.         } catch (InstantiationException e) {  
  41.             e.printStackTrace();  
  42.         } catch (IllegalAccessException e) {  
  43.             e.printStackTrace();  
  44.         } catch (ClassNotFoundException e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.         return null;  
  48.     }  
  49.  
  50.     public static void main(String[] args) {  
  51.         BeanFactory factory = new BeanFactory("hello.properties");  
  52.         MessageWrite write = (MessageWrite) factory.getBean("messageWrite");  
  53.         MessageSource source = (MessageSource) factory.getBean("messageSource");  
  54.         write.write(source.getMessage());  
  55.     }  
  56.  
  57. }  
  58.  
  59. interface MessageSource {  
  60.     public String getMessage();  
  61. }  
  62. /**  
  63.  * message  
  64.  * @author lei  
  65.  * 2011-8-22  
  66.  */  
  67. class SimpleMessageSource implements MessageSource {  
  68.  
  69.     public String getMessage() {  
  70.         return "hello world";  
  71.     }  
  72. }  
  73. /**  
  74.  * 输出Service  
  75.  * @author lei  
  76.  * 2011-8-22  
  77.  */  
  78. interface MessageWrite {  
  79.     public void write(String str);  
  80. }  
  81.  
  82. class SimpleMessageWrite implements MessageWrite {  
  83.     public void write(String str) {  
  84.         System.out.println(str);  
  85.     }  
  86. }  
  87. /**  
  88.  * 附上hello.properties  
  89.  * /messageWrite=com.ioc.service.SimpleMessageWrite  
  90.  * /messageSource=com.ioc.service.SimpleMessageSource  
  91.  *   
  92.  */