IOC容器辅助:
简单类型(8个基本+String), value:如果是对象类型,用ref=“引用Id值”
注入的三种模式:
1.set注入:
赋值:默认使用set方法;
依赖注入底层通过反射实现;
2.构造器注入:
通过构造方法赋值;
构造器与书写不一致可以用下面三个方法指定
<!-- index="0" --> <!-- name="name" --> <!-- type="String" -->
<constructor-arg value="qgmd" ></constructor-arg>
3.通过P命名空间
<bean id="Course" class="org.qgm.entity.Course" p:cname="qwe" p:teacher-ref="teacher" p:cno="03">
注入集合类型:
List Set Array Map Properties
前三种标签可以混用
细节:
<property name="stuNo" value="1"></property>
<!--
等价,value不需要加"",且可以加别的标签
<property name="stuNo">
<value type="int">1</value>
</property>
-->
且有些特殊符号使用
eg:<用<
子标签
<property name="stuName" >
<value> 1<![CDATA[>]]>2</value>
</property>
空值写标签<null/>
自动装配(只适用于引用类型):
虽然能降低代码量,但是降低可读性
byName:自动寻找:其他bean的id值=改类的属性值
Bytype:其他bean的类型(class),是否与类的ref属性类型一致(只能有一个bean满足条件)
constructor:用构造器的方法进行自动装配,不同是可以写不同的构造器,包含不同的属性值
约定优于配置。
<!--
自动装配
course2类中有一个ref属性teacher(属性名),并且ioc容器中有一个bean的id值是teacher
bean的id=类的属性名
-->
<bean id="course2" class="org.qgm.entity.Course" autowire="byName">
全局可以在文件头添加:
default-autowire="byName"