<?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="bookService" class="com.itheima.service.impl.BookServiceImpl"><constructor-arg name="userDao" ref="userDao"/><constructor-arg name="bookDao" ref="bookDao"/></bean></beans>
构造器注入参数配置问题(了解)在前面我们已经介绍了构造器的注入方法
但如果我们在bean中的数据名称发生改变,配置就不再适配,所以提供了一些方法来解决参数配置问题:
- 配置中使用constructor-arg标签type属性设置按形参类型注入
<!--解决形参名称的问题 , 与形参名不耦合--><bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">根据构造方法参数类型注入<constructor-arg type="int" value="https://www.huyubaike.com/biancheng/10"/><constructor-arg type="java.lang.String" value="https://www.huyubaike.com/biancheng/mysql"/></bean><bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><constructor-arg name="userDao" ref="userDao"/><constructor-arg name="bookDao" ref="bookDao"/></bean>
- 配置中使用constructor-arg标签index属性设置按形参类型注入
<!--解决参数类型重复问题 , 使用位置解决参数匹配--><bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"><!--根据构造方法参数位置注入--><constructor-arg index="0" value="https://www.huyubaike.com/biancheng/mysql"/><constructor-arg index="1" value="https://www.huyubaike.com/biancheng/100"/></bean><bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"><constructor-arg name="userDao" ref="userDao"/><constructor-arg name="bookDao" ref="bookDao"/></bean>
依赖注入方式选择依赖注入方式有以下选择标准:- 强制依赖使用构造器进行 , 使用setter注入有概率不进行注入导致null对象出现
- 可选依赖使用setter注入进行,灵活性高
- Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
- 如果有必要可以两者并用,使用构造器注入完成强制依赖的注入 , 使用setter注入完成可选依赖的注入
- 实际开发中根据情况分析,如果受控对象没有提供setter方法则只能采用构造器注入
- 自己开发的模块尽量推荐setter注入
- IoC容器根据bean所依赖的资源在容器中自动查找并注入bean中的过程称为自动装配
- 按类型(常用)
- 按名称
- 按构造方法
- 不启用
<?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 class="com.itheima.dao.impl.BookDaoImpl"/><!--autowire属性:开启自动装配,通常使用按类型装配--><bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/></beans>
依赖自动装配特征:依赖集合注入除了基本类型和引入类型外 , 我们有时也需要注入集合
- 自动装配用于引用类型注入,不能对简单类型进行操作
- 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
- 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合 , 不推荐使用
- 自动装配优先级低于setter注入和构造器注入,同时出现时,自动装配配置失效
下面我们简单介绍一下结合的注入:
// 数据类 package com.itheima.dao.impl;import com.itheima.dao.BookDao;import java.util.*;public class BookDaoImpl implements BookDao {private int[] array;private List<String> list;private Set<String> set;private Map<String,String> map;private Properties properties;public void setArray(int[] array) {this.array = array;}public void setList(List<String> list) {this.list = list;}public void setSet(Set<String> set) {this.set = set;}public void setMap(Map<String, String> map) {this.map = map;}public void setProperties(Properties properties) {this.properties = properties;}public void save() {System.out.println("book dao save ...");System.out.println("遍历数组:" + Arrays.toString(array));System.out.println("遍历List" + list);System.out.println("遍历Set" + set);System.out.println("遍历Map" + map);System.out.println("遍历Properties" + properties);}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 怎么玩军棋(军棋新手教程)
- ipad怎么打开分屏(ipad怎么分屏打游戏)
- ipad分屏怎么恢复(ipadair2能不能分屏)
- ipad如何打开分屏模式(ipad分屏取消的方法)
- ipad分屏怎么打开(ipad第九代分屏功能)
- ipad如何设置分屏(ipad九代分屏操作方法)
- iPad分屏怎么用(ipadpro怎么分屏)
- ipad如何左右分屏(ipad第五代可以分屏吗)
- 手机指南针怎么看(指南针怎么看方向)
- 指南针怎么看方向(指南针罗盘)