依赖注入方式、依赖自动装配
Setter注入
引用类型
在bean中定义引用类型属性并提供可访问的set方法
配置中使用property标签ref属性注入引用类型对象
简单类型
在bean中定义引用类型属性并提供可访问的set方法
配置中使用property标签value属性注入简单类型数据
构造器注入
引用类型(了解)
在bean中定义引用类型属性并提供可访问的构造方法
配置中使用constructor-arg标签ref属性注入引用类型对象
参数适配(了解)
配置中使用constructor-arg标签type属性设置按形参类型注入
配置中使用constructor-arg标签index属性设置按形参位置注入
依赖注入方式选择
1.强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现
(强制依赖:这个ben运行必须需要的东西用构造器注入,因为构造器一旦指定了,你这个参数必须给,你不会忘,忘了的话对象无法造,配置文件也报错)
2可选依赖使用setter注入进行,灵活性强
(可注可不注的东西使用setter注入)
3.Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
5.实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
6.自己开发的模块推荐使用setter注入
什么是自动装配
IoC容器根据bean所以来的资源在容器中自动查找并注入到bean中的过程称为自动装配
自动装配的方式
按类型(常用)
按名称
按构造方法
不启用自动装配
依赖自动装配
配置中使用bean标签autowire属性设置自动装配的类型
特征
1.自动装配用于引用类型依赖注入,不能对简单类型进行操作
2.使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
3.使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
4.自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
集合注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<!--数组注入-->
<property name="array">
<array>
<value>100</value>
<value>200</value>
<value>300</value>
</array>
</property>
<!--list集合注入-->
<property name="list">
<list>
<value>itcast</value>
<value>itheima</value>
<value>boxuegu</value>
<value>chuanzhihui</value>
</list>
</property>
<!--set集合注入-->
<property name="set">
<set>
<value>itcast</value>
<value>itheima</value>
<value>boxuegu</value>
<value>boxuegu</value>
</set>
</property>
<!--map集合注入-->
<property name="map">
<map>
<entry key="country" value="china"/>
<entry key="province" value="henan"/>
<entry key="city" value="kaifeng"/>
</map>
</property>
<!--Properties注入-->
<property name="properties">
<props>
<prop key="country">china</prop>
<prop key="province">henan</prop>
<prop key="city">kaifeng</prop>
</props>
</property>
</bean>
</beans>
注意:array和list互相能够使用,大部分注入的都是简单类型
加载properties文件
开启context命名空间
使用context命名空间,加载指定properties文件
使用${}读取加载的属性值
不加载系统属性
加载多个properties文件
加载所有properties文件
加载properties文件标准格式
从类路径或jar包中搜索并加载properties文件