Spring25 IoC(控制反转)容器之容器与Bean(附示例)_第1页
Spring25 IoC(控制反转)容器之容器与Bean(附示例)_第2页
Spring25 IoC(控制反转)容器之容器与Bean(附示例)_第3页
Spring25 IoC(控制反转)容器之容器与Bean(附示例)_第4页
Spring25 IoC(控制反转)容器之容器与Bean(附示例)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Spring2.5 IoC(控制反转)容器之容器与Bean(附示例) 及包 是Spring IoC容器的基础。BeanFactory提供了配制框架及基本功能,ApplicationContext 是BeanFactory的扩展,增加了更多支持企业核心内容的功能如AOP、资源处理、事务管理等。注意:BeanFactory和ApplicationContext都是接口,在应用中至于选择使用哪个接口要根据具体需求来定,由于ApplicationContext接口功能更强大,一般推荐使用此接口。容器和BeanBean就是由Spring容器初始化、装配及管理的对象,定义bean及bean之间的依赖关系由

2、配置元数据来描述。BeanFactory是Spring IoC容器的实际代表者,是IoC的核心接口,负责实例化、定位、配置应用程序中的对象及这些对象之间的依赖关系。XmlBeanFactory是BeanFactory其中的一个实现类,它提供以XML方式描述应用程序对象及其之间的依赖关系。注意:以XML方式来配置元数据是目前最常用的方式但并不是唯一的描述格式。Spring IoC容器至少有一个bean的定义,一般有多个。使用XML配置元数据时,在顶层的<beans/>内配置一个或多个<bean/>元素。Bean的定义与应用程序中实际使用的对象是一一对应的。这些bean包括

3、:服务层对象、DAO对象、类似struts的Action的表现层对象、Hibernate的SessionFactory对象、JMS的Queue对象等。Bean的定义与领域对象不同,领域对象的创建和加载必须依赖具体的DAO和业务逻辑。以下是Spring配置文件的基本结构:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans" xmlns:xsi="http:/www.w3.o

4、rg/2001/XMLSchema-instance" "><bean id="." class="."> <!里面相关的配置放在这 -> </bean> <bean id="." class="."> <!里面相关的配置放在这 -> </bean> <!其它的定义 -></beans>实例化容器,见下例:ApplicationContext context = new ClassPathXml

5、ApplicationContext( new String "services.xml", "daos.xml");BeanFactory factory = context;、可以将XML配置文件分解成多个文件,另一做法是使用一个或多个的<import/>元素来引入一个或多个bean的定义,注意:<import/>元素要放在<bean/>元素前配置,见下例:<beans> <import resource="services.xml"/> <import resou

6、rce="resources/messageSource.xml"/> <import resource="/resources/themeSource.xml"/> <bean id="bean1" class="."/> <bean id="bean2" class="."/></beans>上面导入的文件都是相对路径,最前的/不要更好。注意:导入的每个配置文件都必须是完整有效的XML Bean配置文件,即要有Spri

7、ng配置文件的完整格式。多种BeanBean的定义由BeanDefinition对象来表示,该定义包含全限定类名、bean行为的定义、对其他bean的引用、创建bean实例时的其它配置设置。Bean的命名每个bean都有一个或多个id(标识符),每个id必须在当前的IoC容器中唯一,有多个id其实就是别名。Xml配置bean时通过使用id或name来指定其标识符。通常建议指定 id,若要指定别名,则在name属性中使用逗号、空格、或冒号将多个id分隔。Bean的name属性不是必须的,若没有指定Ioc容器会自动为其生成一个唯一的name。Bean的别名使用<alias/>元素来指定

8、,如:<alias name=”fromName” alias=”toName”/>实例化bean<bean/>元素的class属性是通常必须的,该属性用来指定实例化对象的类型,该属性的用途有:第一,通常直接使用反射调用类的构造器来创建bean(这是通常情况下);第二,调用类的静态工厂方法来创建bean的实例(这种情况较少)。用构造器来实例化bean这种方式下class需要一个默认的空的构造器。在容器中使用非bean的形式也是可以的。使用XML这样指定bean:<bean id="exampleBean" class="example

9、s.ExampleBean"/>用静态工厂方法实例化bean此时bean的定义除了需要指定class属性外,还需要factory-method属性来指定使用的工厂方法,如:<bean id="exampleBean" class="examples.ExampleBean2" <!createInstance必须是静态的方法à factory-method="createInstance"/>用实例工厂方法实例化bean此时bean的定义的class属性必须为空,factory-bean 属

10、性必须指定为当前(或其祖先)容器中包含工厂方法的bean的名称,factory-method属性来设定bean的实例工厂方法,如:<bean id="serviceLocator" class="com.foo.DefaultServiceLocator"><!其它配置à </bean><bean id="exampleBean" <!此时class属性必须为空à factory-bean="serviceLocator" factory-method=

11、"createInstance"/>使用容器通过BeanFactory 我们可以访问bean定义,如:Resource res = new FileSystemResource("beans.xml");BeanFactory factory = new XmlBeanFactory(res);接着使用getBean(String) 方法就可以取得bean的实例  -本节综合实例:1、新建一个java工程,名为spring2.5,加入jar包:spring-framework-2、在工程src下新建spring2.5的配置文件,这里名取为

12、:beans.xml,整个工程测试完后其全部代码如下:  Xml代码 1. <?xml version="1.0" encoding="gbk"?>  2. <beans xmlns="/schema/beans"  3.        xmlns:xsi="/2001/

13、XMLSchema-instance"  4.        xsi:schemaLocation  5.            /schema/beans/spring-beans-2.5.xsd">  6.    <!-配置Peson这

14、个bean,使用默认的构造器来实例化bean->  7.    <bean id="person" class="com.iwtxokhtd.spring.bean.Person"/>  8.    <!-使用别名->  9.    <alias name="person" alias="another

15、Person"/>  10.    <!-使用静态工厂方法来实例化bean->  11.    <bean id="staticfactory" class="com.iwtxokhtd.spring.bean.StaticFactory"  12.      factory-method="createInstance&q

16、uot;/>  13.    <!-使用实例工厂方法来实例化bean->  14.    <bean id="instancefactory" class="com.iwtxokhtd.spring.bean.InstanceFactory"/>  15.    <bean id="realinstancefactory"

17、 factory-bean="instancefactory" factory-method="createInstance"/>  16. </beans>  <?xml version="1.0" encoding="gbk"?><beans xmlns="/schema/beans" xmlns:xsi="http:/www.w

18、3.org/2001/XMLSchema-instance" /schema/beans/spring-beans-2.5.xsd"> <!-配置Peson这个bean,使用默认的构造器来实例化bean-> <bean id="person" class="com.iwtxokhtd.spring.bean.Person"/> <!-使用别名-> <alias name="person" alias="

19、;anotherPerson"/> <!-使用静态工厂方法来实例化bean-> <bean id="staticfactory" class="com.iwtxokhtd.spring.bean.StaticFactory" factory-method="createInstance"/> <!-使用实例工厂方法来实例化bean-> <bean id="instancefactory" class="com.iwtxokhtd.spring.be

20、an.InstanceFactory"/> <bean id="realinstancefactory" factory-bean="instancefactory" factory-method="createInstance"/></beans>3、测试中用到的bean:(1)使用默认构造器实例化bean用到的Person.java:    Java代码 1. /*  2.  * 使用默认的构造器实例化bean  

21、;3.  */  4. package com.iwtxokhtd.spring.bean;   5.   6. import java.io.Serializable;   7.   8. /*  9.  * author Administrator  10.  *  11.  */  12. /此bean要符合Spring配置文件中对bean定义的规范  

22、; 13. public class Person implements Serializable    14.   15.     /*  16.      *   17.      */  18.     private static final

23、 long serialVersionUID = 8038645005550821000L;   19.     /实体标识   20.     private int id;   21.     /姓名   22.     SuppressWarnings("unused")

24、  23.     private String name;   24.     public int getId()    25.         return id;   26.        27.    

25、; public void setId(int id)    28.         this.id = id;   29.        30.     public String getName()    31.    

26、60;    return "使用默认构造器来实例化bean"   32.        33.     public void setName(String name)    34.          = name;  

27、 35.        36.     Override  37.     public int hashCode()    38.         final int PRIME = 31;   39.    

28、;     int result = 1;   40.         result = PRIME * result + id;   41.         return result;   42.   &#

29、160;    43.     Override  44.     public boolean equals(Object obj)    45.         if (this = obj)   46.       

30、;      return true;   47.         if (obj = null)   48.             return false;   49.     

31、60;   if (getClass() != obj.getClass()   50.             return false;   51.         final Person other = (Person) obj;

32、  52.         if (id != other.id)   53.             return false;   54.         return true;   

33、55.        56.        57.        58.   59.   /* * 使用默认的构造器实例化bean */package com.iwtxokhtd.spring.bean;import java.io.Serializable;/* * author Administrator * */此bean要符合Spring配置文件中对bean定义的规范p

34、ublic class Person implements Serializable /* * */private static final long serialVersionUID = 8038645005550821000L;/实体标识private int id;/姓名SuppressWarnings("unused")private String name;public int getId() return id;public void setId(int id) this.id = id;public String getName() return "

35、使用默认构造器来实例化bean"public void setName(String name) = name;Overridepublic int hashCode() final int PRIME = 31;int result = 1;result = PRIME * result + id;return result;Overridepublic boolean equals(Object obj) if (this = obj)return true;if (obj = null)return false;if (getClass() != obj.g

36、etClass()return false;final Person other = (Person) obj;if (id != other.id)return false;return true; (2)使用静态工厂方法实例化bean用到的StaticFactory.java:     Java代码 1. /*  2.  * 使用静态工厂方法实例化bean  3.  */  4. package com.iwtxokhtd.spring.bean; &

37、#160; 5.   6. /*  7.  * author Administrator  8.  *  9.  */  10. public class StaticFactory    11.   12.     private int id;   13.     Suppr

38、essWarnings("unused")   14.     private String name;   15.     public int getId()    16.         return id;   17.      &

39、#160; 18.     public void setId(int id)    19.         this.id = id;   20.        21.     public String getName()   

40、; 22.         return "使用静态工厂方法实例化bean"   23.        24.     public void setName(String name)    25.         th

41、 = name;   26.        27.     public static StaticFactory createInstance()   28.         return new StaticFactory();   29.   

42、60;    30.        31.   /* * 使用静态工厂方法实例化bean */package com.iwtxokhtd.spring.bean;/* * author Administrator * */public class StaticFactory private int id;SuppressWarnings("unused")private String name;public int getId() return id;public

43、void setId(int id) this.id = id;public String getName() return "使用静态工厂方法实例化bean"public void setName(String name) = name;public static StaticFactory createInstance()return new StaticFactory(); (3)使用实例工厂方法实例化bean用到的InstanceFactory.java: Java代码 1. /*  2.  * 

44、使用实例工厂方法实例化bean  3.  */  4. package com.iwtxokhtd.spring.bean;   5.   6. /*  7.  * author Administrator  8.  *  9.  */  10. public class InstanceFactory    11.   12. 

45、0;   private int id;   13.     SuppressWarnings("unused")   14.     private String name;   15.     public int getId()    16.   

46、60;     return id;   17.        18.     public void setId(int id)    19.         this.id = id;   20.    &

47、#160;   21.     public String getName()    22.         return "使用实例工厂方法实例化bean"   23.        24.     public void setName

48、(String name)    25.          = name;   26.        27.     public  InstanceFactory createInstance()   28.      

49、   return new InstanceFactory();   29.        30.        31.   /* * 使用实例工厂方法实例化bean */package com.iwtxokhtd.spring.bean;/* * author Administrator * */public class InstanceFactory private int id;S

50、uppressWarnings("unused")private String name;public int getId() return id;public void setId(int id) this.id = id;public String getName() return "使用实例工厂方法实例化bean"public void setName(String name) = name;public InstanceFactory createInstance()return new InstanceFactory();&

51、#160;客户端测试类:Java代码 1. /*  2.  * 读取Spring配置文件测试  3.  */  4. package com.iwtxokhtd.xml.test;   5.   6. import org.springframework.beans.factory.BeanFactory;   7. import org.springframework.beans.factory.xml.XmlBeanFactory;

52、   8. import org.springframework.context.ApplicationContext;   9. import org.springframework.context.support.ClassPathXmlApplicationContext;   10. import org.springframework.core.io.FileSystemResource;   11. import org.springframework.core.

53、io.Resource;   12.   13. import com.iwtxokhtd.spring.bean.InstanceFactory;   14. import com.iwtxokhtd.spring.bean.Person;   15. import com.iwtxokhtd.spring.bean.StaticFactory;   16.   17. /*  18.  * author 

54、;Administrator  19.  *  20.  */  21. public class ReadSpringFileTest    22.   23.     public static void main(String args)    24.         /*

55、  25.          * 得到应用程序上下文环境实例  26.          * 查找类路径下的beans.xml文件  27.          */  28.        

56、 ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");   29.         /若有多个spring配置文件,则可以使用数组,如下:   30.         /ApplicationContext context=new 

57、ClassPathXmlApplicationContext(new String"beans.xml","dao.xml");   31.         /读取配置文件中的bean   32.         System.out.println("使用默认构造器来实例化bean");   33. 

58、60;       System.out.println("-");   34.         Person person=(Person)context.getBean("person");   35.         /打印测试结果   36. 

59、0;       System.out.println("没有用别名:"+person.getName();   37.         /使用别名   38.         Person anotherPerson=(Person)context.getBean("anotherPer

60、son");   39.         System.out.println("使用了别名:"+anotherPerson.getName();   40.         System.out.println("-");   41.        

61、0;System.out.println("使用静态工厂方法来实例化bean");   42.         System.out.println("-");   43.         StaticFactory sf=(StaticFactory)context.getBean("staticfactory"); 

62、0; 44.         System.out.println(sf.getName();   45.         System.out.println("-");   46.         System.out.println("使用实例工厂方法来实例化bean&qu

63、ot;);   47.         System.out.println("-");   48.         InstanceFactory instancefactory=(InstanceFactory)context.getBean("realinstancefactory");   49.   

64、;      System.out.println(instancefactory.getName();   50.         /使用容器的方法   51.         System.out.println("-");   52.      

65、;   System.out.println("使用容器");   53.         System.out.println("-");   54.         Resource res=new FileSystemResource("src/beans.xml");  

66、 55.         BeanFactory factory=new XmlBeanFactory(res);   56.         person=(Person)factory.getBean("person");   57.         System.ou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论