spring4.x(七)之第五章--注入参数详解及方法注入

1. 注入参数详解

  1. 字面值: 字面值一般指可用字符串表示的值,这些值可以通过元素标签进行注入。
    默认情况下,基本数据类型及其封装类,String等类型都可以采取字面值注入的方式。
    Spring容器在内部为字面值提供了编辑器,可将以字符串表示的字面值转换为内部变量的相应类型。允许注册自定义的编辑器
    • xml 中的特殊字符:&<>"'
    • 解决方法:
    • 使用<![CDATA[ ]]>特殊标签将特殊字符包含起来
    • 使用 XML 转义序列表示这些特殊字符
      这里写图片描述
      注: xml 解析器会忽略元素标签内部字符串前后空格,但spring不会忽略。
  2. 引用其他Bean:
    这里写图片描述
    <ref>元素可以通过以下3个属性引用容器中的其他Bean :
    这里写图片描述
  3. 内部Bean: 如果carBean只被bossBean引用,而不被容器中任何其他的Bean引用,则可以将car以内部Bean的方式注入Boss中
    这里写图片描述
  4. null值: 为属性设置一个null的注入值,必须使用<null />元素标签

    <property name="brand"><null/></property>
    <!--而不是-->
    <property name="brand"><value></value></property>
  5. 级联属性: 在定义Boss时直接为Car的属性提供注入值
    这里写图片描述
    为car属性声明一个初始化对象
    这里写图片描述
    注: ① 处如果没有实例化,那 spring 在设置级联属性时将抛出 NullValueInNestedPathException 异常
  6. 集合类型属性
    1. List 与 Set:
      这里写图片描述
      对应的配置为 :
      这里写图片描述
    2. Map :
      这里写图片描述
      这里写图片描述
      假如某一Map元素的键和值都是对象,可以采用以下配置方式 :
      这里写图片描述
    3. Properties: Properties类型可以看做Map的特例。Map的键和值可以是任何类型的对象,而Properties属性的键和值只能是字符串
      这里写图片描述
    4. 集合合并 : Spring支持集合合并的功能,允许子<bean>继承父<bean>的同名属性集合元素,并将子<bean>中配置的集合属性值和父<bean>中配置的同名属性值合并起来作为最终Bean的属性值
      这里写图片描述
      merge=”true”指示子和父中同名属性值进行合并,子Bean的favorites集合有5个元素。
    5. 通过util命名空间配置集合类型的Bean: 如果希望配置一个集合类型的Bean,而非一个集合类型的属性,可以通过util命名空间进行配置,首先需要在Spring配置头文件中引入util命名空间的声明
      这里写图片描述
      然后配置一个List类型的Bean,可以通过list-class显式指定List的实现类:支持value-type属性,指定集合中的值类型
      这里写图片描述
      配置一个Set类型的Bean,可以通过set-class显式指定Set的实现类:支持value-type属性,指定集合中的值类型
      这里写图片描述
      配置一个Map类型的Bean,可以通过map-class显式指定Map的实现类:支持key-type和value-type属性,指定Map的键和值类型
      这里写图片描述
  7. 简化配置方式
    这里写图片描述
    注: 使用简化的方式,无法使用<![CDATA[]]>处理XML特殊字符,只能使用XML转义序列对特殊字符进行转换
    这里写图片描述
    注: <ref>的简化形式对应于<ref bean=”xxx”><ref parent=”xxx”><ref local=”xxx”>没有对应的简化形式
    3.使用p命名空间 :
    这里写图片描述
    这里写图片描述
    注: 因为p命名空间中的属性名是可变的,所以p命名空间没有对应的Schema定义文件,也就无须在 xsi:schemaLocation 中为p命名空间指定Schema定义文件
  8. 自动装配: <bean> 元素提供了一个指定自动装配类型的属性:autowire=”<自动装配类型>”
    这里写图片描述
    注: 在实际开发中,XML 配置方式很少启用自动装配功能,而基于注解的配置方式默认采用 byType 自动装配策略。

2. 方法注入:(要将 CGLib 类包加入到类路径中)

  1. lookup方法注入: Spring IoC容器拥有复写Bean方法的能力,这功能归功于CGLib类包。 CGLib 可以在运行期动态操作Class字节码,为Bean动态创建子类或实现类。
    现在声明一个MagicBoss接口,并声明一个getCar()的接口方法。
    通过配置为该接口提供动态的实现,让getCar()接口方法每次都返回新的carBean:
    这里写图片描述
    通过lookup-method元素标签为MagicBoss的getCar()提供动态实现,返回prototype类型的car Bean,这样Spring将在运行期为MagicBoss接口提供动态实现,效果等同于:
    这里写图片描述
    每次调用MagicBoss的getCar()方法都会从容器中获取car Bean,由于car Bean的作用域是prototype,所以每次都返回新的car实例。
    looup方法注入,一般在希望通过一个singleton Bean获取一个prototype Bean时使用
  2. 方法替换: 用于替换别的Bean必须实现MethodReplacer接口,Spring利用该接口的方法替换目标Bean的方法。
    这里写图片描述

参考: 在IoC容器中装配Bean(精通Spring+4.x++企业应用开发实战 四)

猜你喜欢

转载自blog.csdn.net/yin__ren/article/details/80925108