现在的位置: 首页 > 综合 > 正文

Spring3之 IoC容器的实例化

2014年01月21日 ⁄ 综合 ⁄ 共 4396字 ⁄ 字号 评论关闭
文章目录

Bean:Spring中,那些组成你应用程序的主体(backbone)及由Spring IOC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。

org.springframework.beans.factory.BeanFactorySpring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bean,并对bean进行管理,包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

Spring IoC容器可以通过多种途径来加载配置元数据,比如本地文件 系统、Java CLASSPATH等(貌似URL也行)。

Spring3之 IoC容器的实例化

 

Spring IoC容器的实例化非常简单,可以用ClassPathXmlApplicationContext or FileSystemXmlApplicationContext类来完成,AnnotationConfigApplicationContext也可以用注解来完成。

 

a).XML式

包名:com.spring305.test.iocInstance

文件列表:BeanA.java,BeanB.java,IocInstance.java,IocInstanceA.xml,在此包下有一包temp,另有一份测试配置文件IocInstance.xml

代码如下:

BeanA.java

BeanB.java

 

 

Java代码  收藏代码

    public class BeanA {  
      
        private int id;  
        private String name;  
      
        public BeanA() {  
        }  
          
        public BeanA(int id, String name) {  
            super();  
            this.id = id;  
            this.name = name;  
        }  
          
        public void testMethod(){  
            System.out.println(BeanA.class);  
        }  
      
                      setter,getter  
    }  

 

 

 

 

 

Java代码  收藏代码

    public class BeanA {  
      
        private int id;  
        private String name;  
      
        public BeanA() {  
        }  
          
        public BeanA(int id, String name) {  
            super();  
            this.id = id;  
            this.name = name;  
        }  
          
        public void testMethod(){  
            System.out.println(BeanA.class);  
        }  
      
                      setter,getter  
    }  

 

 

 

IocInstanceA.xml

Xml代码  收藏代码

    <!-- 下面是引用XML的路径及写法注释,使用时只保留一个,并且对应相应路径 -->  
    <!-- 这二种表示这个引入的文件要与本XML文件在同一级目录中  
        <import resource="IocInstance.xml"/>  
        <import resource="/IocInstance.xml"/>  
        下面二种表示在当前XML目录中temp文件夹下面  
         <import resource="temp/IocInstance.xml"/>  
         <import resource="/temp/IocInstance.xml"/>  
     -->  
     <!-- 这下面的一个是相对路径的书写方式,引入根目录下的XML文件,  
        <import resource="../../../../IocInstance.xml"/>  
     -->  
       
     <!--  
        classpath:这种方式可以使用但是,在spring3的英文文档中并不推荐使用,推荐使用用../到父目录中或者/到下级目录来找,因为classpath:可能在部署的时候引向不正确的目录  
        <import resource="classpath:IocInstance.xml"/>       
      -->  
      <!-- 下面的这种方式也是可以的,但是,也不被推荐,原因同上,如果采用这二种情况,spring3建议把路径写上,然后用${}来引入 -->  
    <import resource="file:D:/workspace/MyEclipseSSH/Spring305/src/IocInstance.xml"/>  
       
    <bean id="beanA" class="com.spring305.test.iocInstance.BeanA"></bean>  

 

 

src目录下IocInstance.xml ,主要是用来测试从一个XML文件引入另外一个文件来实例化的,它和temp包下的IocInstance.xml的内容一样也只有beanB这个bean,后者主要是用来测试路径的。

IocInstance.xml

Xml代码  收藏代码

  1. <bean id="beanB" class="com.spring305.test.iocInstance.BeanB"></bean>  

 

 

 

 

测试类:

IocInstance.java

 

Java代码  收藏代码

    import org.junit.Test;  
    import org.springframework.beans.factory.BeanFactory;  
    import org.springframework.context.ApplicationContext;  
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;  
    import org.springframework.context.support.ClassPathXmlApplicationContext;  
    import org.springframework.context.support.FileSystemXmlApplicationContext;  
      
    public class IocInstance {  
      
        @Test//annotation实例化容器  
        public void TestIocInstanceAnnotation(){  
            ApplicationContext atx = new AnnotationConfigApplicationContext(BeanAAnnotaion.class);  
            //下面的Bean名是类的名字,首字母小写  
            //BeanAAnnotaion a = (BeanAAnnotaion)atx.getBean("beanAAnnotaion");  
            //下面是自己在类中用@bean定义的bean  
            //BeanAAnnotaion a = (BeanAAnnotaion)atx.getBean("getBeanAAnnotation");  
            //System.out.println(a.getMsg());  
              
            //下面的是定义的一个返回类型为String类型的bean  
            String getMsg = atx.getBean("getMsg",String.class);  
            System.out.println(getMsg);  
              
              
        }  
          
        //@Test//XML实例化容器  
        public void TestIocInstanceXML(){  
            //加载1到N个XML文件 ,文件前加与不加'/',代表的都是src目录下的文件  
            //ApplicationContext atx = new ClassPathXmlApplicationContext("IocInstance.xml");  
            //ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"IocInstance.xml"});  
            //ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"IocInstance.xml","IocInstance2.xml"});  
            //ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"/IocInstance.xml"});  
              
            //BeanB a = (BeanB)atx.getBean("beanB");  
            //a.testMethod();  
              
            //XML配置在com...包下,则可以如下书写  
            //ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"/com/spring305/test/iocInstance/IocInstanceA.xml"});  
            //ApplicationContext atx = new ClassPathXmlApplicationContext(new String[]{"com/spring305/test/iocInstance/IocInstanceA.xml"});  
            //下面也可以用FileSystemXmlApplicationContext来加载XML文件,这里要写文件的绝对位置  
            ApplicationContext atx = new FileSystemXmlApplicationContext(new String[]{"file:D:/workspace/MyEclipseSSH/Spring305/src/com/spring305/test/iocInstance/IocInstanceA.xml"});  
              
            //ApplicationContext接口实现了BeanFactory接口  
            BeanFactory factory = atx;  
              
            //BeanA a = (BeanA)atx.getBean("beanA");  
            //下面的一种得到bean的方式,不用进行和以前一样写强制转换  
            BeanA a = atx.getBean("beanA",BeanA.class);  
            a.testMethod();  
      
        }  
          
    }  

 

 

b).Annotaion式

BeanAAnnotaion.java

 

Java代码  收藏代码
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
  
@Configuration  
public class BeanAAnnotaion {  
  
    @Bean  
    public BeanAAnnotaion getBeanAAnnotation(){  
        return new BeanAAnnotaion();  
    }  
      
    @Bean   
    public String getMsg(){  
        return BeanAAnnotaion.class.toString();  
    }  
      
}  

抱歉!评论已关闭.