配置形式: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子标签