SpringIOC容器是一个超级工厂
在IOC中定义bean必须有无参构造
IOC赋值:
一、set方式注入
简单类型(8个基本类型+String)用Value,对象类型用ref=“bean的ID值”
依赖注入 底层是反射技术
根据类拿到方法。
特殊值注入,可以用<value>子标签 特殊符号可以用 <![CDATA[这里可以写任意符号]]>
<bean id="teacher" class="com.entity.Teacher">
<property name="Name">
<value type="java.lang.String">z<![CDATA[<>?]]>s</value>
</property>
</bean>
-处理空值
1、"" 空字符串
<bean id="teacher" class="com.entity.Teacher">
<property name="Name">
<value></value>
</property>
</bean>
2、null
<bean id="teacher" class="com.entity.Teacher">
<property name="Name">
<null/>
</property>
</bean>
二、构造器(构造方法赋值)注入
<bean id="course" class="com.entity.Course">
<!-- 构造方法赋值 可以根据 index type name 来精确指定参数的位置-->
<!-- teacher 是一个类 -->
<constructor-arg value="c++" name="courseName"></constructor-arg>
<constructor-arg value="20" index="1"></constructor-arg>
<constructor-arg ref="teacher" type="com.entity.Teacher"></constructor-arg>
<constructor-arg value="c++" name="courseName" index="0" type="com.entity.Course"></constructor-arg>
</bean>
三、p命名空间注入
<bean id="course" class="com.entity.Course" p:courseName="c语言" p:courseHour="30" p:teacher-ref="teacher">
</bean>
示例:各种集合类型注入:
<!-- 各种集合类型赋值-->
<bean id="CollectionDemo" class="com.newinstanc.AllCollection">
<property name="list" >
<list>
<value>足球</value>
<value>篮球</value>
<value>乒乓球</value>
</list>
</property>
<property name="map" >
<map>
<entry>
<key>
<value>foot</value>
</key>
<value>足球4</value>
</entry>
<entry>
<key>
<value>basketball</value>
</key>
<value>蓝球4</value>
</entry>
<entry>
<key>
<value>pp</value>
</key>
<value>乒乓球4</value>
</entry>
</map>
</property>
<property name="set" >
<set>
<value>足球2</value>
<value>篮球2</value>
<value>乒乓球3</value>
</set>
</property>
<property name="arry" >
<array>
<value>足球1</value>
<value>篮2球</value>
<value>乒乓球2</value>
</array>
</property>
<property name="props" >
<props>
<prop key="foot">足球5</prop>
<prop key="basktop">蓝球5</prop>
<prop key="fpp">乒乓球5</prop>
</props>
</property>
</bean>
四、自动装配
只适用于ref类型
Course 类中有一个 Teacher 属性,依赖于 Teaher类,所以它会自动去寻找该IOC容器中是否有一个
bean的iD值=Course类的一个属性值。byName本质是byID
<bean id="course" class="com.entity.Course" autowire="byName"></bean>
bean的id值=Course类中属性类型一致,前提条件只能有一个bean满足条件
<bean id="course" class="com.entity.Course" autowire="byType"></bean>
根据bean的类型是否与该 Course类中构造方法参数类型一致
<bean id="course" class="com.entity.Course" autowire="constructor"></bean>
也可在头文件中全局设置,自动装配方式 default-autowire="byName|byType|constructor"
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName">
可读性差,建议少用。