依赖注入(DI配置)

news/2024/10/17 19:27:23/

依赖注入有几种方式?

1.1 依赖注入的两种方式

  • setter注入简单类型==引用类型(很常用)==

  • 构造器注入简单类型引用类型

1.2 setter方式注入

setter方式注入使用什么子标签?

引用类型

简单类型

1.3 构造方式注入

构造方式注入使用什么子标签?

引用类型

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

public class OrderServiceImpl implements OrderService {//引入dao对象private OrderDao orderDao ;public OrderServiceImpl(OrderDao orderDao) {this.orderDao = orderDao;}

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

<bean id="orderDao" class="com.by.dao.impl.OrderDaoImpl"></bean><bean id="orderService" class="com.by.service.impl.OrderServiceImpl"><constructor-arg name="orderDao" ref="orderDao"/>
</bean>

1.4 依赖注入方式选择

  1. 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现

  2. 可选依赖使用setter注入进行,灵活性强

  3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨

  4. 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入

  5. 实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入

  6. ==自己开发的模块推荐使用setter注入==

2. 依赖自动装配【理解】

如何配置按照类型自动装配?

2.1 自动装配概念

  • IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

  • 自动装配方式==按类型(常用)==按名称按构造方法不启用自动装配

2.2 自动装配类型

依赖自动装配

配置中使用bean标签autowire属性设置自动装配的类型---按类型

<bean id="bookDao" class="com.by.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.by.service.impl.BookServiceImpl" autowire="byType"/>

代码演示:

public class BookDaoImpl implements BookDao {@Overridepublic void save() {System.out.println("book dao save ...");}

serviceImpl:

public class BookServiceImpl implements BookService {private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}@Overridepublic void save() {bookDao.save();System.out.println("book dao running.....");}

测试:

 ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
BookService bookService= (BookService) ac.getBean("bookService");bookService.save();

如果出现两个id怎么办?比如

<bean id="bookDao" class="com.by.dao.impl.BookDaoImpl"/>
<bean id="bookDao2" class="com.by.dao.impl.BookDaoImpl"/><bean id="bookService" class="com.by.service.impl.BookServiceImpl" autowire="byName" />

依赖自动装配特征

  1. 自动装配用于引用类型依赖注入,不能对简单类型进行操作

  2. 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用

  3. 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用

  4. 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

3 集合注入

public class OrderDaoImpl implements OrderDao {public int[] array;public List<String> list;public Set<String> set;public Map<String,String> map;public Properties properties;//生成Setter方法

3.1 注入数组类型数据

 <bean id="orderDao" class="com.by.dao.impl.OrderDaoImpl">
<property name="array"><array><value>100</value><value>200</value><value>300</value></array>
</property>
</bean>

3.2 注入List类型数据

<property name="list"><list><value>北京</value><value>河南</value><value>郑州</value><value>高新区</value></list>
</property>

3.3 注入Set类型数据

<property name="set"><set><value>北京</value><value>河南</value><value>郑州</value><value>高新区</value></set>
</property>

3.4 注入Map类型数据

<property name="map"><map><entry key="country" value="china"/><entry key="province" value="henan"/><entry key="city" value="kaifeng"/></map>
</property>

3.5 注入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>标签


http://www.ppmy.cn/news/629661.html

相关文章

【Linux】计算机软硬件体系结构

文章目录 冯诺依曼体系结构操作系统(Operator System)什么是操作系统为什么要有操作系统操作系统是怎么实现管理的 系统调用接口和库函数总结 冯诺依曼体系结构 谈到计算机的硬件结构&#xff0c;第一个想到的必然是经典的冯诺依曼体系结构&#xff1a; 我们常见的计算机&…

【Linux】计算机的软硬件体系结构

文章目录 前言一、冯洛伊曼体系结构二、操作系统 (OS)1、什么是操作系统2、为什么要有操作系统3、操作系统如何进行管理 三、系统调用与用户操作接口1、系统调用接口2、用户操作接口 四、计算机的软硬件体系结构 前言 本文意在对计算机的软硬件体系结构进行梳理&#xff0c;包…

软件环境 硬件环境java,软件环境和硬件环境都指什么?

答&#xff1a;软件环境 Software Environment 运行于计算机硬件之上的驱动计算机及其外围设备实现某种目的的软件系统。 硬件环境 Hardware Environment 计算机及其外围设备组成的计算机物理系统。 硬环境和软环境&#xff0c;是依据传播活动参加者的感受所作出的分类。 ... 答…

二、软硬件环境分析

1、概述 对于本项目来说&#xff1a;涉及到HTML、CGI之间的数据通讯&#xff0c;它们是通过boa服务器进行通讯&#xff1b;还有A9服务器与CGI之间的通讯&#xff1b;zigbee与A9之间的通讯&#xff1b;那么就需要将整个项目分层设计&#xff0c;HTML应用层、A9平台层、zigbee/m…

openGauss安装软硬件安装环境

软硬件环境要求 介绍openGauss的软硬件环境要求。建议部署openGauss的各服务器具有等价的软硬件配置。 硬件环境要求 表1 列出了openGauss服务器应具备的最低硬件要求。在实际产品中&#xff0c;硬件配置的规划需考虑数据规模及所期望的数据库响应速度。请根据实际情况进行规…

使用yarn安装与卸载包

目录 yarn安装包 一、安装依赖 二、安装开发依赖 三、安装全局依赖 四、升级依赖 1.升级指定依赖包版本 2.升级所有依赖包版本 五、删除依赖 yarn 卸载包 一、yarn 卸载包 二、yarn 卸载依赖 三、yarn卸载命令 四、yarn卸载依赖包命令 总结 yarn安装包 一、安装…

2023上半年软考系统分析师科目一整理-10

2023上半年软考系统分析师科目一整理-10 商业智能关注如何从业务数据中提取有用的信息&#xff0c;然后采用这些信息指导企业的业务开展。商业智能系统主要包括数据预处理、&#xff08;B&#xff09;、数据分析和数据展现 4 个主要阶段。其中数据预处理是整合企业原始数据的第…

采用UltraISO软碟通制作Dos启动盘教程

前言 使用VxWorks的用户经常会涉及到硬盘启动与网线启动的切换&#xff0c;这就需要制作dos启动盘来协助我们&#xff01;现在就教大家如何制作dos启动盘&#xff0c;当然此方法也适用于其他启动盘的制作&#xff0c;例如ubuntu、centos启动盘符的制作&#xff01; 1、dos盘映…