spring通过xml配置文件实现依赖注入的方法

devtools/2024/9/23 11:18:24/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

在 Spring 框架中,使用 XML 配置文件来实现依赖注入主要有以下几种方法:

  1. 通过构造器注入(Constructor Injection)
  2. 通过 Setter 方法注入(Setter Injection)
  3. 通过静态工厂方法注入
  4. 通过实例工厂方法注入
  5. 通过 p-namespace 注入
  6. 通过 c-namespace 注入

1. 通过构造器注入(Constructor Injection)

通过构造器注入依赖是在创建 bean 时,通过构造函数传递依赖对象。使用 <constructor-arg> 元素来指定构造器参数。

示例:

xml"><bean id="beanA" class="com.example.BeanA"><constructor-arg ref="beanB"/>
</bean><bean id="beanB" class="com.example.BeanB"/>

2. 通过 Setter 方法注入(Setter Injection)

通过 Setter 方法注入依赖是在 bean 创建之后,通过 setter 方法传递依赖对象。使用 <property> 元素来指定属性值。

示例:

xml"><bean id="beanA" class="com.example.BeanA"><property name="beanB" ref="beanB"/>
</bean><bean id="beanB" class="com.example.BeanB"/>

3. 通过静态工厂方法注入

通过静态工厂方法注入依赖是通过调用静态工厂方法来创建 bean 实例。

示例:

xml"><bean id="beanA" class="com.example.BeanFactory" factory-method="createBeanA"><constructor-arg ref="beanB"/>
</bean><bean id="beanB" class="com.example.BeanB"/>

说明: com.example.BeanFactory 类中需要有一个静态方法 createBeanA,返回 BeanA 的实例。

4. 通过实例工厂方法注入

通过实例工厂方法注入依赖是通过调用工厂 bean 的方法来创建 bean 实例。

示例:

xml"><bean id="beanFactory" class="com.example.BeanFactory"/><bean id="beanA" factory-bean="beanFactory" factory-method="createBeanA"><constructor-arg ref="beanB"/>
</bean><bean id="beanB" class="com.example.BeanB"/>

说明: com.example.BeanFactory 类中需要有一个实例方法 createBeanA,返回 BeanA 的实例。

5. 通过 p-namespace 注入

p-namespace 是一种简洁的属性注入方式,它是通过 XML 命名空间的扩展来实现的。

示例:

首先在 XML 文件的 beans 根元素中声明 p 命名空间:

xml"><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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="beanA" class="com.example.BeanA" p:beanB-ref="beanB"/><bean id="beanB" class="com.example.BeanB"/>
</beans>

6. 通过 c-namespace 注入

c-namespace 是一种简洁的构造器注入方式,它是通过 XML 命名空间的扩展来实现的。

示例:

首先在 XML 文件的 beans 根元素中声明 c 命名空间:

xml"><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:c="http://www.springframework.org/schema/c"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="beanA" class="com.example.BeanA" c:beanB-ref="beanB"/><bean id="beanB" class="com.example.BeanB"/>
</beans>

这些方法提供了灵活性,可以根据需要选择最适合的依赖注入方式。构造器注入适用于需要在创建时就提供所有依赖的场景,而 Setter 注入适用于需要在创建后设置或更改依赖的场景。p-namespace 和 c-namespace 则提供了更加简洁的配置方式。


http://www.ppmy.cn/devtools/46244.html

相关文章

Satellite Stereo Pipeline学习

1.在Anaconda某个环境中安装s2p pip install s2p 2.在Ubuntu系统中安装s2p源代码 git clone https://github.com/centreborelli/s2p.git --recursive cd s2p pip install -e ".[test]" 3.在s2p中进行make all处理 中间会有很多情况&#xff0c;基本上哪个包出问题…

聊聊限流的一些事儿

一、背景 最近几年&#xff0c;随着微服务的流行&#xff0c;服务与服务之间依赖越来越强&#xff0c;调用也越来越复杂&#xff0c;服务间的稳定性变突显出来。特别是在遇到突发请求时&#xff0c;常常需要通过缓存、限流、熔断降级、负载均衡等多种方式保证服务的稳定性。其…

D365 Project Operations

目录 D365包含哪些模块&#xff1f; D365 Project Operations是什么&#xff1f; D365 Project Operations优势 D365 Project Operations部署方案 总结 D365包含哪些模块&#xff1f; 微软的D365是一套功能强大的企业管理解决方案&#xff0c;其中包含了多种模块&#xff…

极简网络用户手册(1)

极简网络系统处理流程 模块位置&#xff1a;参数平台--专题分析--极简网络分析 步骤&#xff1a; 步骤一&#xff1a;创建精细化场景策略 步骤二&#xff1a;创建任务&#xff0c;主要选择策略&#xff08;包括√配置和距离配置&#xff09;和需要处理的小区清单&#xff08;源…

前端怎么实现登录:深度解析与实现策略

前端怎么实现登录&#xff1a;深度解析与实现策略 在Web应用开发中&#xff0c;登录功能是不可或缺的一部分。前端作为与用户直接交互的界面&#xff0c;其登录实现方式不仅影响着用户体验&#xff0c;还直接关系到应用的安全性。那么&#xff0c;前端如何实现登录功能呢&…

LeetCode:反转链表I

文章收录于LeetCode专栏 LeetCode地址 反转链表I 题目 给你单链表的头节点head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。   示例 1&#xff1a; #mermaid-svg-IYmD16EKuu3CZWwV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size…

计算机视觉与模式识别实验2-1 角点检测算法(Harris,SUSAN,Moravec)

文章目录 &#x1f9e1;&#x1f9e1;实验流程&#x1f9e1;&#x1f9e1;Harris算法SUSAN算法Moravec算法 &#x1f9e1;&#x1f9e1;全部代码&#x1f9e1;&#x1f9e1; &#x1f9e1;&#x1f9e1;实验流程&#x1f9e1;&#x1f9e1; Harris算法 Harris算法实现步骤&…

三十四、openlayers官网示例Dynamic clusters解析——动态的聚合图层

官网demo地址&#xff1a; https://openlayers.org/en/latest/examples/clusters-dynamic.html 这篇绘制了多个聚合图层。 先初始化地图 &#xff0c;设置了地图视角的边界extent&#xff0c;限制了地图缩放的范围 initMap() {const raster new TileLayer({source: new XYZ…