Spring(二)——Bean配置和依赖注入

  • 配置形式:XML配置,注解配置

  • 配置方式:

    • 在根元素beans下有一个bean标签来配置

    • bean中的属性:

      • class:baen的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参构造器。

      • id:标识容器中的bean,id是唯一的。

      • 还可以使用p命名空间为bean进行赋值,需要先导入p命名空间。相对于传统的配置方式更加方便

  • 依赖注入(都是bean的子标签):有两种方式:1.属性注入;2构造注入

    • 参数注入null(了解):可以使用专用的 <null/> 元素标签为 Bean 的字符串或其它对象类型的属性注入 null 值,写在<property>里面

    • 级联属性(了解):直接使用会报错,必须先初始化Car,然后在后面再来使用级联属性,会修改原值。与Struts2不同

    • 1.属性注入(常用):即通过setter方法注入Bean的属性值或依赖的对象(引用)

      • 属性注入元素<property>,使用name属性指定Bean的属性名称(注意:属性名称只跟setter方法后面的名称有关,跟成员变量的名称无关--即setName(),则属性名称为name),value属性<value>子标签指定属性值。

      • ref(也有子标签<ref>):可以引用其他Bean,只需要填写其他Bean的id

                          或  

  • 或者可以写一个内部Bean:那就不能被外部引用

  • 假设一个人有多辆车,在实体类中使用List来存储,那么在配置文件的代码应该如下:<property>中有一个<list>子标签

  • 假设用map类型来存

  • 假设用Properties类型:

  • 总结:<property>中:

    • 属性

      • name为指定Bean的属性名称

      • value为其属性赋值

    • 子标签

      • <value>:跟属性value一样

      • <ref>:需要使用bean属性来指定引用的id

      • <bean>:也可以写一个内部bean,但不能被外部引用

      • <list>:为List类型的属性赋值

      • <map>:为Map类型的属性赋值,其中有一个子标签<entry>,其子标签有几个属性key和value-ref和value。key为键,value-ref的值为引用对象的id,value的值为字符串

      • <props>:为Properties类型的属性赋值,跟map有点相同。其有一个子标签<prop>,其属性key为键,值只需写在<prop>中。主要来整合hibernate

  • 但是<list><map>等这些不能被外部引用,如果想要多次被其他bean引用可以使用标签<util:list>等,如下:

    • 2.构造注入(少用):通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。

      • 构造器注入在 <constructor-arg> 元素里声明属性--按照构造函数声明的参数顺序, <constructor-arg> 中没有 name 属性,就不学该方式的其他知识点了

      • 少用的原因:假设创建4个成员变量,并创建两个构造函数,一个构造函数包含前三个参数,后一个构造函数包含第一二个和最后一个参数,那么在配置Bean时,如果要准确的调用某个构造器,那么得多指明些东西来标识我调用这个构造函数,比如指明声明顺序index或声明类型type,比较麻烦

    • 细节处理:注入方式中的值如果要输入特殊字符(如:<>)需要进行处理:

      • 如下,value中的值,这样会报错。目前我遇到使用这个特殊字符 <>会报错,所以主要处理<>

      • 可以使用 <![CDATA[特殊字符+文字]]> 把字面值包裹起来。并且要使用value子标签


版权声明:本文为weixin_41800884原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。