`

spring编程----第二部分,Spring IOC

阅读更多
这一部分,主要介绍spring IOC,即spring容器
[][]
第一节.what is Spring IOC?
1.Inversion of Control(IOC)
2.Also calls Dependency Injection(DI)
3.Object art given their dependencies at creation time by some external entity that coordinates each object in the system
4.The key benefit of DI is loose coupling

IOC是整个spring框架的核心,即控制反转,也叫做依赖注入。指的是对象之间的依赖关系,由spring容器在运行时候依据spring的配置文件动态建立。
How to use Spring IOC?
public class Logic{
    Dao dao;//dependency
    public Logic(){
       dao = DaoFactory.getDao();
    }
}


传统上,如果一个类中调用了DaoImpl的方法,需要在这个类中直接创建DaoImpl的对象,或者编写工厂类,有工厂类创建对象。这样的方式都是在编译时就确定了类和DaoImpl的关系,增加了代码的耦合度。

在spring中,我们将对象的创建等相关工作交给spring容器来实现。像web container管理servlet一样,spring容器负责管理JavaBean的生命周期。

IOC的方式
    注入依赖(DI)主要有三种注入方式,即构造器注入、Setter注入和使用注解方式。由于大量的构造器参数可能使程序变得笨拙,特别是党某些属性是可选的时候,因此通常情况下,spring开发团队提倡使用setter注入方式。
    我在下面分别介绍这三种方式
    1.构造器注入方式
先看一个java类
public class StudentService implements IStudentService {   
  
   private IStudentDao studentDao;   
   private String id;   
  
   public StudentService(IStudentDao studentDao,String id){   
    this.studentDao = studentDao;   
    this.id = id;   
   }   
 public void saveStudent() {   
  studentDao.saveStudent();   
  System.out.print(",ID为:"+id);   
 }   
  
}  



在来看一下spring的配置文件
   
      <bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>  
 <bean id="studentService" class="com.wch.service.impl.StudentService">  
     <constructor-arg index="0" type="com.wch.dao.IStudentDao" ref="studentDao" />  
     <constructor-arg index="1" value="123456" type="java.lang.String"></constructor-arg>  
 </bean> 
    



基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个依赖。在类StudentService 中,有俩个参数,一个是studentDao,一个是id(string类型)用'type'属性来显式指定那些构造参数的类型
index属性来显式指定构造参数的索引,从0开始

setter注入
Spring注入依赖的Setter的方式注入依赖是经常使用的到得一种方法,也非常的简单,只需给每个需要注入的属性设置Setter方法
  构造器注入与Setter注入的比较
     由于大量的构造器参数可能使程序变得笨拙,特别是当某些属性是可选的时候。因此通常情况下,Spring开发团队提倡使用setter注入。而且setter DI在以后的某个时候还可将实例重新配置(或重新注入)
    尽管如此,构造器注入还是得到很多纯化论者(也有很好的理由)的青睐。一次性将所有依赖注入的做法意味着,在未完全初始化的状态下,此对象不会返回给客户代码(或被调用),此外对象也不需要再次被重新配置(或重新注入)。
对于注入类型的选择并没硬性的规定。只要能适合你的应用,无论使用何种类型的DI都可以。对于那些没有源代码的第三方类,或者没有提供setter方法的遗留代码,我们则别无选择--构造器注入将是你唯一的选择

同样是上面的提到的StudentService类,我们来看看setter方式的spring配置文件书写方式
<bean id="studentDao" class="com.wch.dao.impl.StudentDao"></bean>   
  <bean id="studentService2" class="com.wch.service.impl.StudentService2">   
<!--   
     指定需要注入bean       
  -->   
     <property name="studentDao" ref="studentDao"></property>     
<!--    
   直接变量(基本类型、Strings类型等。),可以通过value属性经行赋值    
  -->   
     <property name="id" value="123456789"></property>      
</bean>   



感谢nellybabyhttp://huangliangbao.iteye.com/的blog,省去了我很多的时间。再此歇息

第二节 基本装配
   通过依赖注入注入的信息一般分为3钟情况:
    1.简单值,例如int、spring等
    2.其他bean类型的对象
    3.集合类型

下面来看一个spring的配置文件
<!-- ref方式注入属性 -->
<bean id="personDao" class="com.persia.PersonDaoBean"></bean>
<bean id="personService4" class="com.persia.PersonServiceBean">
  <property name="personDao" ref="personDao"></property>
<property name="name" value="persia"></property>
  <property name="age" value="21"></property>
</bean>


对于简单的值,在<property>标记中使用value即可;如果注入的是其他的bean,需要在property中使用ref

下面来看一个集合类型的spring配置文件
 <property name="sets">
    <!-- 集合的注入 -->
     <set>
       <value>第一个</value>
       <value>第二个</value>
       <value>第三个</value>
     </set>
  </property>
  
  <property name="lists">
    <!-- 集合的注入 -->
    <list>
        <value>第一个l</value>
       <value>第一个l</value>
       <value>第三个l</value>
    </list>
    
  </property>
   
  <property name="map">
   <map>
      <entry key="key1" value="value-1"></entry>
      <entry key="key2" value="value-2"></entry>
      <entry key="key3" value="value-3"></entry>
   </map>
  </property>



如果需要注入的属性类型为list,需要使用<list>标记,允许有重复的元素,而属性类型为set时候,需要使用标记<set>。map类型需要使用标记<map>,它为键值对应

再来看一个
 <property name="properties">
    <props>
      <prop key="key1">value1</prop>
      <prop key="key2">value2</prop>
      <prop key="key3">value3</prop>
    </props>
  </property>
 <property name="properties">
    <props>
        <value>
           key1=value1
           key2=value2
           key3=value3
        </value>
    </props>
  </property>

Properities类型的配置有以上俩种方式
分享到:
评论

相关推荐

    spring培训-笔记

    重构第二步——工厂(Factory)模式 9 重构第三步——工厂(Factory)模式的改进 10 重构第四步-IoC容器 11 控制反转(IoC)/依赖注入(DI) 11 什么是控制反转/依赖注入? 11 依赖注入的三种实现形式 12 ...

    Spring框架文档 - 核心技术部分 中文版 - 第二部分.pdf

    在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档...

    Spring框架文档 - 核心技术部分 中英双语版 第二部分.pdf

    在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档...

    Spring攻略PDF版

    因为上传大小的限制,分为两部分上传,这是第二部分,第一部分会在评论中给出链接 绝对是spring攻略中文版第二版 Spring专家力作 理论与实践完美结合 问题描述→解决方案→实现方法 第一部分 核心概念  第1章 ...

    Spring攻略中文版PDF

    因为上传大小的限制,分为两部分上传,这是第一部分,第二部分会在评论中给出链接 绝对是spring攻略中文版第二版 Spring专家力作 理论与实践完美结合 问题描述→解决方案→实现方法 第一部分 核心概念  第1章 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...

    Spring攻略英文版(附带源码)

     第2章 Spring简介   2.1 Spring Framework   2.1.1 Spring的模块介绍   2.1.2 Spring的发布版本   2.1.3 Spring的项目   2.2 安装Spring Framework   2.2.1 问题描述   2.2.2 解决方案   ...

    Spring教程  主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。

    重构第二步——工厂(Factory)模式 9 重构第三步——工厂(Factory)模式的改进 10 重构第四步-IoC容器 11 控制反转(IoC)/依赖注入(DI) 11 什么是控制反转/依赖注入? 11 依赖注入的三种实现形式 12 ...

    深入解析SPRING架构与设计原理-第二版

    《深入理解Java虚拟机 JVM高级特性与最佳实践 第2版 .pdf》《深入浅出MyBatis技术原理与实战.pdf》、《MySQL技术内幕 InnoDB 第2版》、《Java并发编程的艺术.pdf》等,看后满意的话请给个5星评价吧。

    Spring的学习笔记

    二、 第二步: 首先整合Spring + Hibernate 41 三、 第三步:再来整合Struts2 41 四、 struts的读常量: 43 第十二课:DTO、VO 43 一、 DTO 43 二、 VO 43 第十二课:SSH整合存在的问题 43 一、 Jsp中访问Session时...

    spring.net中文手册在线版

    第二部分. 中间层数据访问 第十四章. 事务管理 14.1.简介 14.2.动机 14.3.核心接口 14.4.用事务进行资源同步 14.4.1.高层次方法 14.4.2.低层次方法 14.5.声明式事务管理 14.5.1.理解Spring.NET声明式事务管理的实现 ...

    Spring.in.Action(中文版)

    第二部分在第1章介绍的IoC和AOP基础之上,展示了如何将这两个概念应用到应用系统的中间层。第三部分走出中间层迈向显示层,在很多J2EE系统中显示层被称为Web层。附录A介绍如何开始自己的Spring应用系统,如何下载...

    Spring+3.x企业应用开发实战光盘源码(全)

     第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。  第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架...

    Spring in Action中文版 清晰pdf part2

    第二部分在第1章介绍的IoC和AOP基础之上,展示了如何将这两个概念应用到应用系统的中间层。第三部分走出中间层迈向显示层,在很多J2EE系统中显示层被称为Web层。附录A介绍如何开始自己的Spring应用系统,如何下载...

    JAVA spring 系列案例50个和学习资料

    Spring系列第2篇:控制反转(IoC)与依赖注入(DI)。Spring系列第3篇:Spring容器基本使用及原理。Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转...

    spring2.5 学习笔记

    二、 第二步: 首先整合Spring + Hibernate 41 三、 第三步:再来整合Struts2 41 四、 struts的读常量: 43 第十二课:DTO、VO 43 一、 DTO 43 二、 VO 43 第十二课:SSH整合存在的问题 43 一、 Jsp中访问Session时...

    Spring攻略(第二版 中文高清版).part1

    第2章 高级Spring IoC容器 57 2.1 调用静态工厂方法创建Bean 57 2.1.1 问题 57 2.1.2 解决方案 57 2.1.3 工作原理 57 2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 解决方案 59 2.2.3...

    spring chm文档

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...

    开源框架 Spring Gossip

    第一个 Spring 程式 BeanFactory、 ApplicationContext Type 2 IoC、Type 3 IoC 属性参考 自动绑定 集合物件注入 Bean 的生命周期 Bean 进阶管理 理想上对于 Bean 来说,它不...

Global site tag (gtag.js) - Google Analytics