Spring6 DI 依赖注入--Bean属性赋值
Spring6基于XML实现Bean 管理(属性赋值)
IOC和DI有什么区别:DI是IOC中的具体实现,DI表示依赖注入或注入属性,注入属性要在创建对象的基础之上完成
依赖注入方法
bean属性赋值方法只有一种:构造器注入(之所以这么说是为了便于记忆),我们知道构造器有两种: 无参构造,有参构造。这两种方法最终都是要调用set方法完成。
有参构造属性赋值
<!--有参构造注入属性 name--> <bean id="" class=""> <!--属性:可以根据有参构造函数的参数名(name), 值:value 或ref(外部BEAN)引用 --> <constructor-arg name="" value=""></constructor-arg> <constructor-arg name="" value=""></constructor-arg> </bean>
<!-- 使用构造方法注入属性 index --> <bean id="" class=""> <!-- 属性:也可以根据使用参数索引 (index) 值:value 或 ref(外部bean)引用 --> <constructor-arg index="0" ref=""/> <constructor-arg index="1" value=""/> </bean>
无参构造属性赋值
无参构造+set方法实现,实体类中要有属性的set 方法和无无参构造函数
<!--set方法注入属性--> <bean id="" class=""> <!--使用property完成属性注入 name:类里面属性名称 value:向属性注入的值 或ref 外部bean引用 --> <property name="" value=""></property> <property name="" value=""></property> </bean>
属性赋值--特殊值
<bean id="" class=""> <!--设置属性为空--> <property name=""> <null/> </property> <!-- 属性值包含特殊符号 把带特殊符号内容写到CDATA --> <property name=""> <value><![CDATA[任意值]]></value> </property> </bean>
在给属性赋值时,如果对象的属性A类型为对象B,那么可以在A的bean中对B的属性赋值,
<bean id='b' class=''> <property name='c' value=''> </bean> <bean id='a' class=''> <property name='mm' value=''> <property name='nn' ref='b'> <!-- 给属性的属性赋值 叫做级联赋值--> <property name='b.c' value=''> </bean>
Bean标签的其它属性
scope属性值
在spring配置文件bean标签里面有属性scope用于设置单实例还是多实例。
singleton,表示单实例对象: 加载spring配置文件就会创建单实例对象
prototype,表示多实例对象 :在调用getBean方法创建多实例对象。
autowire自动装配
<bean id="" class ="" autowire="">
</bean>
byName 根据属性名称进行注入,bean的id要和类的属性名称一致
byType 根据类型(class)注入,此时同一个类的bean定义要保证唯一