一、IoC背景

       Spring Ioc(DI) 容器提供了POJO全面的服务(依赖注入、线程池服务、事务服务、安全性服务、生命周期管理服务)。

     IoC容器负责对象的创建、依赖关系设置等工作从而,开发者有更多的精力放在业务逻辑上。

二、

        (1) BeanFactory 和 ApplicationContext

               BeanFactory 提供最基础的IoC容器,提供配置框架和基础功能,适用于环境内存受限的场合,如Applet环境

               ApplicationContext   继承自BeanFactory ,增加了大量的企业级特征。简化了同Spring AOP集成、支持消息资源的国际化(il8n)处理、提供事件支持、针对web应用的做了许多辅助工作。更适合企业级应用。

        (2) 宿主DI容器配置元数据方式

            1.基于XML的DI容器配置元数据

            java类

  1. package cn.beanfactory.itf; 
  2.  
  3. public interface IHelloStr { 
  4.     String getContext(); 
  1. package cn.beanfactory.itf; 
  2.  
  3. public interface IHelloWorld { 
  4.     String getContext(); 
  1. package cn.beanfactory.bean; 
  2.  
  3. import java.io.IOException; 
  4. import java.io.InputStream; 
  5. import java.util.Properties; 
  6.  
  7. import org.apache.commons.logging.Log; 
  8. import org.apache.commons.logging.LogFactory; 
  9.  
  10. import cn.beanfactory.itf.IHelloStr; 
  11. @ForYou 
  12. public class FileHelloStrImpl implements IHelloStr { 
  13.  
  14.     private String propfilename; 
  15.     private String helloWorld; 
  16.     private Log log = LogFactory.getLog(FileHelloStrImpl.class); 
  17.     public FileHelloStrImpl(String propfilename){ 
  18.         log.info(" FileHelloStrImpl(String propfilename)"); 
  19.         this.propfilename=propfilename; 
  20.     } 
  21.     public FileHelloStrImpl(String propfilename,TestMain t){ 
  22.         log.info(" FileHelloStrImpl(String propfilename,TestMain t)"); 
  23.         this.propfilename=propfilename; 
  24.     } 
  25.     public FileHelloStrImpl(TestMain t,String propfilename){ 
  26.         log.info(" FileHelloStrImpl(TestMain t,String propfilename)"); 
  27.         this.propfilename=propfilename; 
  28.     } 
  29.     @Override 
  30.     public String getContext() { 
  31.         // TODO Auto-generated method stub 
  32.         try
  33.  
  34.             Properties properties = new Properties(); 
  35.             InputStream is = getClass().getClassLoader().getResourceAsStream(propfilename); 
  36.             properties.load(is); 
  37.             is.close(); 
  38.             helloWorld  = properties.getProperty("helloWorld"); 
  39.         }catch (IOException e) { 
  40.             // TODO: handle exception 
  41.             log.error("",e); 
  42.         } 
  43.         return helloWorld; 
  44.     } 
  45.  
  1. package cn.beanfactory.bean; 
  2.  
  3. import cn.beanfactory.itf.IHelloStr; 
  4. import cn.beanfactory.itf.IHelloWorld; 
  5.  
  6. public class HelloWorld implements IHelloWorld { 
  7.     private IHelloStr helloStr; 
  8.     public void setHelloStr(IHelloStr helloStr){ 
  9.         this.helloStr=helloStr; 
  10.     } 
  11.     @Override 
  12.     public String getContext() { 
  13.         // TODO Auto-generated method stub 
  14.         return helloStr.getContext(); 
  15.     } 
  16.     public static HelloWorld getHelloWorld(){  
  17.         return  new HelloWorld(); 
  18.     } 
  19.  
  1. package cn.beanfactory.main; 
  2.  
  3. import org.apache.commons.logging.Log; 
  4. import org.apache.commons.logging.LogFactory; 
  5. import org.springframework.beans.factory.BeanFactory; 
  6. import org.springframework.beans.factory.xml.XmlBeanFactory; 
  7. import org.springframework.core.io.ClassPathResource; 
  8. import org.springframework.core.io.Resource; 
  9.  
  10. import cn.beanfactory.itf.IHelloWorld; 
  11.  
  12. public class BeanFactoryMain { 
  13.     private static Log log =LogFactory.getLog(BeanFactoryMain.class); 
  14.     /** 
  15.      * BeanFactory  
  16.      * @param args 
  17.      */ 
  18.     public static void main(String[] args) { 
  19.         // TODO Auto-generated method stub 
  20.         Resource resource = new ClassPathResource("applicationContext.xml"); 
  21.         BeanFactory beanFactory =  new XmlBeanFactory(resource); 
  22.         IHelloWorld hw = (IHelloWorld) beanFactory.getBean("helloWorld"); 
  23.         log.info(hw.getContext()); 
  24.     } 
  25.  

      

 

 XML 配置文件

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
  6.     <bean name="helloWorld" class="cn.beanfactory.bean.HelloWorld"> 
  7.         <property name="helloStr" ref="fileHello"></property> 
  8.     </bean> 
  9.     <bean name="fileHello" class="cn.beanfactory.bean.FileHelloStrImpl"> 
  10.         <constructor-arg value="helloWorld.properties" /> 
  11.     </bean> 
  12. </beans> 

 

        2.基于注解的DI容器配置元数据