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

spring实例化对象的几种方式(使用XML配置文件)

前言    

    Spring框架作为一个轻量级的控制反转(IoC)容器,为开发者提供了多种对象实例化的策略。通过这些策略,开发者可以更加灵活地控制对象的生命周期和依赖关系。无论是通过XML配置、注解配置还是Java配置,Spring都能轻松地实现对象的实例化。本文将介绍Spring实例化对象的几种常见方式。

前面的例子都是无参构造实例化,所以这里就不再赘述。

有参构造实例化 

    先提供一个有参的构造方法:

    public UserService(String str){System.out.println("有参构造实例化对象"+str);}

然后在配置的xml文件使用constructor-arg添加参数,value为参数的值

    <bean id="text" class="com.cc.service.UserService" ><constructor-arg name="str" value="hhhhhh"/></bean>

注意name的值要与形参相同:

  

运行结果如图:


在有多个参数的情况下,还需要使用index属性来配置参数的值(如果name属性都配置了也可以不用index):

    public UserService(String str,int string){System.out.println("有参构造实例化对象"+str+","+string);}
    <bean id="text" class="com.cc.service.UserService" ><constructor-arg name="str" index="0" value=""/><constructor-arg name="string" index="1" value="188"/></bean>

工厂方式实例化对象 

静态工厂方式实例化对象

    静态工厂方式实例化对象是通过属性factory-method来指定一个静态方法,在该静态方法中达到创建对象的目标并返回交给spring容器管理。

<bean id="user" class="com.cc.entity.User" factory-method="createObj"></bean>
public class User {public static Person createObj() {return new Person();}
}
public class Main {public static void main(String[] args) {ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");Person user = (Person) a.getBean("user");System.out.println(user);}
}

    采用静态工厂的方式去实例化对象,只需要在bean标签中指定一个静态方法即可,用factory-method属性来指定,方面名自已取,反正由idea自动帮我们创建好。然后我们只需要在创建好的静态方法中返回一个对象就搞定了。  

实例工厂方式实例化对象

    实例工厂方式与静态工厂方式略有不同:

    静态工厂方式是一个静态方法,它直接通过类名调用,并返回一个新的bean实例;

    在xml配置文件中,使用<bean>标签定义bean实例,用factory-method属性指定静态工厂方法名称

    实例工厂方式是一个非静态方法,它需要在已经创建了工厂对象的基础上,通过工厂对象来调用。

    factory-bean指定已经创建好的工厂bean的id,再使用factory-method属性指定工厂方法的名称

    <bean id="user" class="com.cc.entity.User" ></bean><bean id="person" class="com.cc.entity.Person" factory-bean="user" factory-method="createObj"></bean>
public class User {public User createObj() {return new User();}
}
public class Main {public static void main(String[] args) {ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");Object bean = a.getBean("person");System.out.println(bean);}
}

实现FactoryBean方式

相关文章:

spring实例化对象的几种方式(使用XML配置文件)

前言 Spring框架作为一个轻量级的控制反转&#xff08;IoC&#xff09;容器&#xff0c;为开发者提供了多种对象实例化的策略。通过这些策略&#xff0c;开发者可以更加灵活地控制对象的生命周期和依赖关系。无论是通过XML配置、注解配置还是Java配置&#xff0c;Spring都能…...

【二叉树】力扣 129.求根节点到叶子节点数字之和

一、题目 二、思路 每找到一个非空节点&#xff0c;之前路径上的所有节点的数量级都要增加1个单位。例如&#xff0c;当前节点为3&#xff0c;之前的节点路径为1 -> 2&#xff0c;presum 1 * 10 2 12&#xff0c;现在路径变为了 1 -> 2 -> 3&#xff0c;sum pres…...

深度学习物体检测之YOLOV5源码解读

V5比前面版本偏工程化,项目化,更贴合实战 一.V5版本项目配置 (1)整体项目概述 首先github直接查找yolov5&#xff0c;下载下来即可。在训练时&#xff0c;数据是怎么处理的&#xff1f;网络模型架构是怎么设计的(如各层的设计)&#xff1f;yolov5要求是大于python3.8与大于等…...

音频数据采样入门详解 - 给Python初学者的简单解释

音频数据采样入门详解 - 给Python初学者的简单解释 声音是如何变成数字的&#xff1f;什么是采样率&#xff1f;为什么要懂这个&#xff1f;Python小例子总结 大家好&#xff01;今天我们来聊一个有趣的话题&#xff1a;音频数据是如何在计算机中处理的。让我用最简单的方式来解…...

Unity类银河战士恶魔城学习总结(P179 Enemy Archer 弓箭手)

教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了敌人弓箭手的制作 Enemy_Archer.cs 核心功能 状态机管理敌人的行为 定义了多个状态对象&#xff08;如 idleState、moveState、attackState 等&#xff09;&#xff0c;通过状态机管理敌人的…...

SpringCloud集成sleuth和zipkin实现微服务链路追踪

文章目录 前言技术积累spring cloud sleuth介绍zipkin介绍Zipkin与Sleuth的协作 SpringCloud多模块搭建Zipkin Server部署docker pull 镜像启动zipkin server SpringCloud 接入 Sleuth 与 Zipkinpom引入依赖 (springboot2.6)appilication.yml配置修改增加测试链路代码 调用微服…...

Python随机抽取Excel数据并在处理后整合为一个文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件&#xff0c;随机从其中选取一部分数据&#xff0c;并将全部文件中随机获取的数据合并为一个新的Excel表格文件的方法。 首先&#xff0c;我们来明确一下本文的具体需求。…...

Linux+Docker onlyoffice 启用 HTTPS 端口支持

文章目录 一、需求二、配置2.1 创建容器2.2 进入容器2.3 生成私钥和证书 2.4 测试访问 一、需求 上篇文章介绍了如何搭建一个 onlyoffice 在线预览服务&#xff0c;但是我们实际场景调用该服务的网站是协议是 https 的 &#xff0c;但是 onlyoffice 服务还没做配置&#xff0c…...

在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c

在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c 1. Installing the extension (在 Visual Studio Code 中安装插件)1.1. Extensions for Visual Studio Code1.2. C/C1.2.1. Pre-requisites 1.3. Makefile Tools 2. Configuring your project (配置项目)2.1.…...

python中math模块常用函数

文章目录 math模块简介各种三角函数反三角函数取整函数欧几里得距离绝对值最大公约数开根号幂阶乘函数 math模块简介 math模块是python标准库的一部分&#xff0c;提供了对于浮点数相关的数学运算&#xff0c;下面是常用的一些function 各种三角函数反三角函数 math.cos、ma…...

优化 Vue 3 开发体验:配置 Vite 使用 WebStorm 作为 Vue DevTools 的默认编辑器

优化 Vue 3 开发体验&#xff1a;配置 Vite 使用 WebStorm 替代 VS Code 作为 Vue DevTools 的默认编辑器 在 Vue 3 项目开发中&#xff0c;合理配置开发工具可以大大提升我们的工作效率。本文将介绍如何配置 Vite&#xff0c;使其在使用 Vue DevTools 时将默认编辑器从 VS Co…...

【C语言练习(9)—有一个正整数,求是几位数然后逆序打印】

C语言练习&#xff08;9&#xff09; 文章目录 C语言练习&#xff08;9&#xff09;前言题目题目解析结果总结 前言 主要到整数的取余(%)和整数的取商(/)&#xff0c;判断语句if…else if …else的使用 题目 给一个不多于3位的正整数&#xff0c;要求:一、求它是几位数&…...

热敏打印机的控制

首次接触热敏打印机&#xff0c;本来没有特别之处&#xff0c;花了大概十天时间完成一款猫学王热敏打印机&#xff0c;给到客户体验后&#xff0c;客户反馈说打字看起来不明显&#xff0c;打印照片有条纹&#xff0c;所以引起了我对于他的关注&#xff0c;几点不足之处需要优化…...

【closerAI ComfyUI】电商赋能,AI模特套图生产,各种姿势自定义,高度保持人物服饰场景一致性,摆拍街拍专用

closerAIGCcloserAI,一个深入探索前沿人工智能与AIGC领域的资讯平台,我们旨在让AIGC渗入我们的工作与生活中,让我们一起探索AIGC的无限可能性!aigc.douyoubuy.cn 【closerAI ComfyUI】电商赋能,AI模特套图生产,各种姿势自定义,高度保持人物服饰场景一致性,摆拍街拍专用…...

ARM学习(36)静态扫描规则学习以及工具使用

笔者来学习了解一下静态扫描以及其规则,并且亲身是实践一下对arm 架构的代码进行扫描。 1、静态扫描认识 静态扫描:对代码源文件按照一定的规则进行扫描,来发现一些潜在的问题或者风险,因为不涉及代码运行,所以其一般只是发现一些规范或则一些质量问题,当然这些可能存在潜…...

使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群

文章目录 使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群Redis 主从架构简介Redis Sentinel 简介配置文件1. 主节点配置 (redis-master.conf)2. 从节点配置 (redis-slave1.conf 和 redis-slave2.conf)redis-slave1.confredis-slave2.conf3. Sentinel 配置 (sentin…...

警惕!手动调整服务器时间可能引发的系统灾难

警惕&#xff01;手动调整服务器时间可能引发的系统灾难 1. 鉴权机制1.1 基于时间戳的签名验证1.2 基于会话的认证机制&#xff08;JWT、TOTP&#xff09; 2. 雪花算法生成 ID 的影响2.1 时间戳回拨导致 ID 冲突2.2 ID 顺序被打乱 3. 日志记录与审计3.1 日志顺序错误3.2 审计日…...

MySQL追梦旅途之性能优化

1、索引优化 索引可以显著加速查询操作&#xff0c;但过多或不适当的索引也会带来负面影响&#xff08;如增加写入开销&#xff09;。因此&#xff0c;选择合适的索引至关重要。 创建索引&#xff1a; 为经常用于WHERE子句、JOIN条件和ORDER BY排序的列创建索引。 CREATE I…...

【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例

从零开始掌握聚类分析&#xff1a;探索数据背后的隐藏模式与应用实例 基本概念聚类分类聚类算法的评价指标&#xff08;1&#xff09;内部指标轮廓系数&#xff08;Silhouette Coefficient&#xff09;DB指数&#xff08;Davies-Bouldin Index&#xff09;Dunn指数 &#xff08…...

基于深度Q网络(Deep Q-Network,DQN)的机器人路径规划,可以自定义地图,MATLAB代码

深度Q网络&#xff08;Deep Q-Network&#xff0c;DQN&#xff09;是一种结合了深度学习和Q学习的强化学习算法&#xff0c;由DeepMind在2015年提出。 1. 算法介绍 DQN算法通过使用深度神经网络来近似Q值函数&#xff0c;解决了传统Q-learning在处理具有大量状态和动作的复杂…...

WZLBadge最佳实践:解决徽章显示中的常见问题和性能优化

WZLBadge最佳实践&#xff1a;解决徽章显示中的常见问题和性能优化 【免费下载链接】WZLBadge //An one-line tool to show styles of badge for UIView 项目地址: https://gitcode.com/gh_mirrors/wz/WZLBadge WZLBadge是一款轻量级的iOS徽章显示工具&#xff0c;能够帮…...

NVIDIA突破:单显卡实现图片驱动720p长视频世界模型生成能力提升

这项由NVIDIA研究团队主导的研究成果于2026年5月以预印本形式发布&#xff0c;论文编号为arXiv:2605.15178&#xff0c;感兴趣的读者可通过该编号查阅完整原文。给你一张照片&#xff0c;再给你一条摄像机的移动路线&#xff0c;然后电脑自动生成一段完整的一分钟高清视频&…...

免费解密网易云音乐NCM格式:ncmdumpGUI完整使用指南

免费解密网易云音乐NCM格式&#xff1a;ncmdumpGUI完整使用指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否在网易云音乐下载了喜欢的歌曲&#xff…...

荷兰电商/教育/客服三大场景语音部署手册,含NL方言变体(Flemish Randstad)适配清单

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;荷兰语音技术生态与NL方言变体战略定位 荷兰语音技术生态正经历从标准荷兰语&#xff08;Algemeen Nederlands, AN&#xff09;向多维方言适应能力演进的关键阶段。NL方言变体——包括弗里斯兰语&#xff08;…...

希捷ST20000NM007D深度评测:20TB企业级硬盘,兼顾容量与稳定的实用之选

在企业存储领域&#xff0c;“容量”与“稳定”始终是核心诉求。随着大数据、云存储、边缘计算的快速发展&#xff0c;企业对存储设备的要求愈发严苛——既需要足够大的空间承载海量数据&#xff0c;又要保证724小时不间断运行的稳定性&#xff0c;同时还要控制功耗与运营成本。…...

【MATLAB】人脸表情识别与情感分析程序(工程实操版)

【MATLAB】人脸表情识别与情感分析程序(工程实操版) 摘要:人脸表情是人类情感表达的核心载体,人脸表情识别与情感分析技术融合了计算机视觉、图像处理、模式识别等多领域知识,广泛应用于人机交互、心理评估、智能安防、教育教学等场景。传统表情识别依赖人工判断,存在主…...

Cocos学习笔记:帧动画制作与动画编辑器使用

一、帧动画基础原理核心逻辑&#xff1a;帧动画本质是逐帧替换精灵&#xff08;Sprite&#xff09;的显示图片&#xff0c;通过控制图片切换频率&#xff0c;让静态序列图呈现连续动态效果。视觉原理&#xff1a;人眼存在视觉残留特性&#xff0c;短时间内连续播放 24 帧以上图…...

避开STM32输入捕获的那些坑:从原理到代码,教你稳定测量高频PWM信号

STM32输入捕获实战&#xff1a;高频PWM信号测量的稳定性优化指南 在嵌入式系统开发中&#xff0c;精确测量高频PWM信号的频率和占空比是许多应用场景的基础需求&#xff0c;从电机控制到电源管理&#xff0c;再到各类传感器接口。然而&#xff0c;当信号频率进入kHz甚至MHz范围…...

Tidal-Media-Downloader:3分钟掌握终极Tidal音乐下载方案

Tidal-Media-Downloader&#xff1a;3分钟掌握终极Tidal音乐下载方案 【免费下载链接】Tidal-Media-Downloader Download TIDAL Music On Windows/Linux/MacOs (PYTHON/C#) 项目地址: https://gitcode.com/gh_mirrors/ti/Tidal-Media-Downloader 还在为无法随时随地畅享…...

10分钟搞定黑苹果:OpCore-Simplify自动化配置工具完全指南

10分钟搞定黑苹果&#xff1a;OpCore-Simplify自动化配置工具完全指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而烦恼吗…...