b05-03 spring注入参数详解(精通Spring 4.x)

本篇内容:

  • 1、参数注入字面值
  • 2、参数引用其他Bean
  • 3、参数注入内部Bean
  • 4、参数注入null
  • 5、参数注入级联属性
  • 6、参数注入集合类型数据:List,Set,Map,集合合并,通过util命名空间

一、字面值

  • 可用字符串表示的值,可用通过元素标签进行注入,默认情况下基本数据类型及封装类,String等类型都可用采用字面值注入方式。
  • Spring容器在内部为字面值提供了编辑器,可用将字符表示的字面值转换为内部变量的相应类型。Spring允许用户注册自定义的编辑器,处理其他类型属性注入时的转换工作。

        
            
        
    
  • 说明:
  • xml标签::让xml解析器将标签中的字符串当成普通文本对待,防止特殊字符串对xml格式造成破坏

xml在有5个特殊字符:&,<,>,“,'

  • 如果配置文件中的注入值包含特殊字符可以采用xml特殊符号标签,或采用转义字符

二、引用其他Bean

  • SpringIoc容器中定义的Bean可以相互引用。

1、引用使用:

    
    
   
       
           
       
   
   

说明:

  • ref bean="data":给当前bean引用id为data的对象做为当前title属性

2、元素

有3个属性引用容器中其他的Bean

  • 1、bean:通过该属性可以引用当前容器或父容器中的Bean
  • 2、local:只能引用同一配置文件中定义的Bean
  • 3、parent:引用父容器中的Bean

说明:

  • 三个属性根据不同的场景使用不同的属性

三、内部Bean

  • 内部Bean和java中匿名内部类相似,没有名字不能被其他bean引用,只能在声明处为外部Bean提供实例注入。
    
        
            
        
    
  • 内部Bean提供的属性会被忽略,scope默认为Prototype类型

四、null值

  • 使用元素标签给属性注入null值
    
  • 此配置等同于bean#setTitle(null)

五、级联属性

  • 和Struts、HIbernate框架一样Spring支持级联属性

1、定义实体对象

public class Car{
    private String title;
    
    public void setTitle(String title){
        this.title = title;
    }
}
public class Person{
    private Car car = new Car();
    
    public void setCar(Car car){
        this.car=car;
    }
}

2、配置文件

    
    
        
    

说明:

  • name="car.title":提供了一个Car实例对象,并设置Car中的title属性为对应value
注意:
  • Spring没有级联属性层级限制,前提级联中对象不能为空。

六、集合类型属性

  • java中常用的集合为list,set,Map,Properties

6.1、list集合

  • 如果一个属性类型为String[ ],int [ ] ,List 都可以使用list方式注入数据
  • 实体方法:public void setTitle(List title)

配置文件

    
        
            
                xxx
                xxx
            
       
              
  • 说明:
  • list中的属性可以使用value也可以使用ref方式注入

6.2、set集合

  • 配置文件
    
        
            
                xxx
                xxx
            
       
       
  • 说明:
  • set集合与list集合的使用基本一致,而本质的区别还是java中list和set集合的区别

6.3、Map集合

  • 配置文件

        
            
                
                    yyy
                    xxx
                
                
                    yyy
                    xxx
                
            
       
       

说明:

  • 一个entity标签代表map中的一个元素
  • 如果map元素的建和值都是对象,则采用ref标签进行引用

6.4、properties

  • Properties类型可以理解为Map类型的特例,Map中键和值可以是任何类型,而Properties的键和值只能是String类型。

1、定义方法

public void setTitle(Properties title)

2、配置文件

    
        
            
                yyy
                xxx
            
       
      
说明:
  • properties没有value元素标签。

6.5、集合合并

  • Spring支持集合合并功能,允许子Bean继承父bean的同名属性集合元素。并将子Bean中配置的集合属性和父Bean中集合属性的同名属性值合并起来作为最终Bean的属性值
 
        
            
                xxx
                yyy
           
       
    
    
    
        
            
                YYY
                XXX
             
         
     

说明:

*子配置文件中merge="true":属性用于指定子Bean和父Bean中同名属性进行合并。如果设置为false则不会进行合并
最终子Bean集合中有4个元素

6.6、通过util命名空间配置集合Bean

  • 如果配置一个集合类型的Bean而不是一个集合类型的属性,可以通过util配置

1、list集合

    
        xxx
        yyy
      

2、set集合

    
        xxx
        xxx
    
    

3、map集合

    
        
        
   

你可能感兴趣的:(b05-03 spring注入参数详解(精通Spring 4.x))