Spring IOC容器入门(二)

Spring对象依赖关系管理

通常一个对象完成自己的功能,会依赖一些属性,这些属性包括基本类型和引用类型,对这些属性值的管理,也称为依赖管理,spring中的DI(依赖注入)就是用来管理bean的属性依赖,根据上面的代码spring创建的bean是不包含对依赖关系的赋值,对bean依赖属性的赋值称为注入。

Spring提供的依赖注入的数据有三类:

  • 基本类型和String
  • 复杂类型/集合类型
  • 其他bean类型(在xml或者注解方式配置过的bean)

注入的方式有三种:

  • 使用构造函数
  • 使用set方法
  • 使用注解

这里需要注意一下,如果需要注入的属性,应该是不经常发生变化的,如果经常发生变化,不适合使用xml注入的方式。

构造函数方法注入数据

使用bean的构造函数,为bean的属性注入值,具体使用方法见下面:


    
    
    


constructor-arg标签的作用就是为给bean的构造方法传入参数,spring提供了3种构造方法传参的方法:

  • 根据参数类型 type
  • 根据参数索引 index
  • 根据参数名称 name
    上面三种name最为常用,type,index,name都是constructor-arg标签中的属性,用于表明需要注入的参数, value属性的作用于是提供基本类型和string类型的参数值,也就是把需要赋的值写入到value属性中。
    Ref属性是用来给其他引用类型的值赋值,该引用类型必须是在spring容器创建的其他bean,比如使用Date类型,那么就需要配置date这个bean,然后把date配置到ref上。

构造函数注入的方法最大的缺点就是,在创建bean必须提供构造方法中所有的参数,一般不才用构造方能来注入属性。

set方法注入属性

使用set方法注入属性的时候,为需要注入的属性提供set方法,spring根据set方法的名称来注入属性的值,注意:不是根据属性的名称。代码如下:


    
    
    



property标签是用于set方法注入属性时,使用的标签。该标签有三个属性:name,value和ref。name是set方法的名称,value和ref含义与上面提到的构造方法一致。
使用set方法注入属性的缺点就是,如果某个bean的属性必须有值,而获得对象的时候,set方法还没有执行。导致属性值为null引发异常。

负责类型注入(集合属性注入)

首先需要在需要注入的java类中定义好相应的集合属性,例如:

private String[] myArray;
private List myList;
private Set mySet;
private Map myMap;
private Properties myPorp;
  • 数组注入
    数组注入使用标签是array,在array中使用value标签添加给数组添加值

   
      
         AAA
         BBB
      

  • List注入
    List的注入是使用list标签

   
      AAA
      BBB
   

  • Set注入
    Set注入是的标签是set

   
      AAA
      BBB
   

  • Map注入
    Map注入使用的标签是map,在map标签有下面两种注入value的方式,一种是把value当成属性,一种是把value当初entry标签下的一个标签。

   
      
      
         value2
      
   

  • Properties注入
    Properties注入使用props标签

  
     v1
     v2
  

负责类型的注入其实可以分为两种,list结果和map结果
List结构包括:array,list,set,他们之间的注入是可以互换的,比如给list注入可以使用set标签和array标签。
Map结构包括map和properties,这两种的注入方式也是可以互换的。
List结构的注入如果value的值是其他引用类型,比如是bean,那么值应该使用ref标签,Map结构的注入如果是使用entry标签,那么它还有key-ref 和value-ref两个标签,分别用户注入bean类型的数据。

你可能感兴趣的:(Spring IOC容器入门(二))