当前位置: 首页 > news >正文

Spring依赖注入

文章目录

        • 1、依赖注入方式
          • 1.1、setter注入
          • 1.2、构造器注入
        • 2、自动装配
        • 3、集合注入

1、依赖注入方式
  • setter注入
    简单类型
    引用类型(很常用)
  • 构造器注入
    简单类型
    引用类型
1.1、setter注入

引用类型

1、在bean中定义引用类型属性并提供可访问的set方法

public class BookServiceImpl implements BookService{private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}

配置中使用property标签ref属性注入引用类型对象 (references)

<bean id="bookService" class="com.demo.service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"/></bean>
</bean>
<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"/>

简单类型

1、在bean中定义简单类型属性并提供可访问的set方法

public class BookDaoImpl implements BookDao {private int number;public void setNumber(int number) {this.number= number;}
}

2、配置中使用property标签value属性注入简单类型数据

<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"><property name="number" value="10"/>
</bean>
1.2、构造器注入

引用类型

1、在bean中定义引用类型属性并提供可访问的构造方法

public class BookServiceImpl implements BookService{private BookDao bookDao;public BookServiceImpl(BookDao bookDao) {this.bookDao = bookDao;}
}

2、配置中使用constructor-arg标签ref属性注入引用类型对象

<bean id="bookService" class="com.demo.service.impl.BookServiceImpl"><constructor-arg name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>

简单注入

1、bean中定义简单类型的属性并提供构造方法方法

public class BookDaoImpl implements BookDao {private int connectionNumber;private String databaseName;public BookDaoImpl(int connectionNumber, String databaseName) {this.connectionNumber = connectionNumber;this. databaseName = databaseName;}
}

2、配置中使用constructor-arg标签value属性注入简单类型对象

<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"><constructor-arg name="connectionNumber" value="10"/><constructor-arg name=“databaseName" value="mysql"/>
</bean>
2、自动装配

自动装配概念

  • IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
  • 自动装配方式
    • 按名称
    • 按构造方法
    • 不启用自动装配

依赖自动装配

  • 配置中使用bean标签autowire属性设置自动装配的类型
<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.demo.service.impl.BookServiceImpl" autowire="byType"/>

依赖自动装配特征

  1. 自动装配用于引用类型依赖注入,不能对简单类型进行操作
  2. 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
  3. 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,不推荐使用
  4. 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
<bean id="bookDao1" class="com.demo.dao.impl.BookDaoImpl"><constructor-arg type="int" value="10"/><constructor-arg type="java.lang.String" value="mysql"/>
</bean><bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"><constructor-arg type="int" value="20"/><constructor-arg type="java.lang.String" value="oracle"/>
</bean><bean id="bookService" class="com.demo.service.impl.BookServiceImpl" autowire="byName">
</bean>
3、集合注入

注入数组类型数据

<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>

**说明:**property标签表示setter方式注入,构造方式注入constructor-arg标签内部也可以写<array>、<list>、<set>、<map>、<props>标签

相关文章:

  • 响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-3 getBoundingClientRect()
  • 【基础算法练习】单调队列与单调栈模板
  • LabVIEW扫频阻抗测试系统
  • 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)
  • vue 跨域XMLHttpRequest
  • 如何使用 WebRTC 与 Kurento 建立视频会议 App
  • 如何成为一个更好的沟通者?
  • 粒子群优化算法(Particle Swarm Optimization,PSO)求解基于移动边缘计算的任务卸载与资源调度优化(提供MATLAB代码)
  • navicat连接postgresql、人大金仓等数据库报错
  • 带libc源码gdb动态调试(导入glibc库使得可执行文件动态调试时可看见调用库函数源码)
  • 【Vue实用功能】Vue实现文档在线预览功能,在线预览PDF、Word等office文件
  • [MQ]常用的mq产品图形管理web界面或客户端
  • MySQL数据导入:MySQL 导入 Excel 文件.md
  • vue预览pdf文件的几种方法
  • 77.Go中interface{}判nil的正确姿势
  • JavaScript-如何实现克隆(clone)函数
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 07.Android之多媒体问题
  • Asm.js的简单介绍
  • JavaScript 基本功--面试宝典
  • Java程序员幽默爆笑锦集
  • JS 面试题总结
  • mysql常用命令汇总
  • Sublime text 3 3103 注册码
  • vagrant 添加本地 box 安装 laravel homestead
  • vue-loader 源码解析系列之 selector
  • 大数据与云计算学习:数据分析(二)
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 给初学者:JavaScript 中数组操作注意点
  • 工程优化暨babel升级小记
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 入门到放弃node系列之Hello Word篇
  • 系统认识JavaScript正则表达式
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 写代码的正确姿势
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​力扣解法汇总946-验证栈序列
  • #git 撤消对文件的更改
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)Android布局类型(线性布局LinearLayout)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET DataGridView数据绑定说明
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .Net接口调试与案例
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...