很难出错的Spring5(二)—— spring配置文件详解、依赖注入的几种方式
一、Spring配置xml配置文件全解前面已经讲过xml配置文件的一些内容了。再加上下面讲的就全了来看一下Spirng的所有配置无非就下面5种beansbeandescription 描述alias别名import多人开发时多个配置文件合并1.1 alias 别名就是给对象起别名getBean方法用别名获得对象和用对象名结果一样但这个注解实际上没什么用因为它可以被bean name替代1.2 bean 补充讲解!-- id :bean的唯一标识符也就是对象名 class :类的全限定名【包名路径】 name: 给对象起别名的第二种方式可以起多个空格、逗号分号都可以作为分隔符spring超级智能 -- bean idhelloJJ classHello namehi hello;hijj, hellojj property namestr value今天是1/9昨天是我的生日/property /beanid和class没有什么可讲的我们看下起别名。1.3 import 导入import什么时候用呢团队开发的时候一人写一个bean.xml最后合并起来。配置文件结构bean.xml张三写的bean2.xml李四写的bean3.xml王五写的applicationContext.xml把所有人的合并起来在程序里只导入applicationContext.xml就行了我们新建一个applicationContext.xml在IDEA配置上下文的提示里不要重新Create new application context,而是选和之前的“Bean”用同一个上下文因为是同一个项目嘛。在beans里面把团队中所有人写的配置文件import进来beans import resourcebeans.xml/import import resourcebeans2.xml/import import resourcebeans3.xml/import /beans在程序里只需要导入applicationContext.xml就可以了ApplicationContext context new ClassPathXmlApplicationContext(applicationContext.xml);那么有一个问题bean.xml 、bean2.xml和bean3.xml里有的对象重名怎么办我们让bean.xml 、bean2.xml和bean3.xml里对象helloJJ的对象名和别名都一模一样然后在程序中用getBean获取对象发现获取到的是最后import进来的beans.xml定义的对象前面的会被覆盖进一步测试如果bean.xml 、bean2.xml和bean3.xml里对象helloJJ的对象名都相同但是别名不同能否实现通过别名获取不同对象呢不能只能获取最后一个被import进来的同名对象前面的同名对象都被覆盖了。这里很奇怪二、依赖注入的几种方式2.1 构造器注入构造器注入要求必须有有参构造方法否则注入的时候会报错2.1.1 普通注入https://blog.csdn.net/qq_44886213/article/details/128581793也就是之前讲过的有参构造器创建对象2.1.2 C-命名空间注入Core Technologies在配置文件中必须加上这一行导入约束!--Address对象-- bean idaddress classcom.company.cj.Address property nameprovince value陕西/property /bean !--Student对象-- bean idstudent_zxf classcom.company.cj.Student c:name黑黑 c:address-refaddress /bean2.2 setter方法注入2.2.1 普通注入常用另开一个module定义Student类用来进行属性的依赖注入测试。每个属性都必须配有setter方法哦。package com.company.cj; import javafx.beans.property.Property; import java.util.*; /* * 测试多种数据类型的注入 * * */ public class Student { private Address address; //引用数据类型 private String name; //也是引用数据类型java常用类 private int age; //基本数据类型 private String []goals; //数组 private ListString friends; //List private SetString hobbies; //Set private MapString,String importantDates; //Map private String Empty1; //测试空值 private String Empty2; //测试空字符串 private Properties info; //Properties public Address getAddress() { return address; } public void setAddress(Address address) { this.address address; } public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } public String[] getGoals() { return goals; } public void setGoals(String[] goals) { this.goals goals; } public ListString getFriends() { return friends; } public void setFriends(ListString friends) { this.friends friends; } public SetString getHobbies() { return hobbies; } public void setHobbies(SetString hobbies) { this.hobbies hobbies; } public MapString, String getImportantDates() { return importantDates; } public void setImportantDates(MapString, String importantDates) { this.importantDates importantDates; } public String getEmpty1() { return Empty1; } public void setEmpty1(String empty1) { Empty1 empty1; } public String getEmpty2() { return Empty2; } public void setEmpty2(String empty2) { Empty2 empty2; } public Properties getInfo() { return info; } public void setInfo(Properties info) { this.info info; } Override public String toString() { return Student{ address address.getProvince() , name name \ , age age , goals Arrays.toString(goals) , friends friends , hobbies hobbies , importantDates importantDates , Empty1 Empty1 \ , Empty2 Empty2 \ , info info }; } }再定义一个Address类作为Student的一个引用属性package com.company.cj; public class Address { private String province; public String getProvince() { return province; } public void setProvince(String province) { this.province province; } }配置文件进行setter注入?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd !--Address对象-- bean idaddress classcom.company.cj.Address property nameprovince value陕西/property /bean bean idstudent_zxf classcom.company.cj.Student !--引用类型的注入-- property nameaddress refaddress/property !--String类型的注入-- property namename valuezxf/property !--int类型的注入-- property nameage value27/property !--数组的注入-- property namegoals array valuea better relationship/value valuefar far from covid-19/value valueimprovement at everywhere/value /array /property !--List的注入-- property namefriends list value杨金水/value value吕芳/value /list /property !--Set的注入-- property namehobbies set valueswim/value valuesing/value /set /property !--Map的注入-- property nameimportantDates map entry key6/5 valuego to xian/entry entry key10/28 valuego to bit/entry /map /property !--空值的注入-- property nameempty1 null/ /property !--空字符串的注入-- property nameempty2 value/property !--Properties的注入-- property nameinfo props prop key姓名zxf/prop prop key职业演员/prop prop key电话16244558866/prop /props /property /bean /beans检查是否注入成功import com.company.cj.Student; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest { public static void main(String[] args) { ApplicationContext context new ClassPathXmlApplicationContext(applicationContext.xml); Student student_zxf (Student) context.getBean(student_zxf); System.out.println(student_zxf.toString()); /** 输出 * Student{ * address陕西, * namezxf, * age27, * goals[a better relationship, far far from covid-19, improvement at everywhere], * friends[杨金水, 吕芳], * hobbies[swim, sing], * importantDates{ * 6/5go to xian, * 10/28go to bit * }, * Empty1null, * Empty2, * info{ * 电话16244558866, * 姓名zxf, * 职业演员 * } * } */ } }2.2.1 P-命名空间注入P-命名空间注入其实也是调用的setter方法。Core Technologies要使用P-命名空间注入就得导入一行约束去上面的链接里面找在bean中输入一个p就会弹出相应的属性P-命名空间方式注入!--Address对象-- bean idaddress classcom.company.cj.Address property nameprovince value陕西/property /bean !--Student对象-- bean idstudent_zxf classcom.company.cj.Student p:namezxf p:address-refaddress /bean

相关新闻

继续分享一些资料

继续分享一些资料

软件名adstefan 11r3ansys Lumerical2022 linuxansys Lumerical2022 windowsanybody 7.4.2anybody modeling system 7.3.4AQWA 、orcaflex、moses、sacs软件技术支持代做服务AQWA视频教程培训服务,建模/水动力/系泊/TLP/半潜/码头靠泊等Ariane, Hydrostar, Wamit,gr…

2026/7/28 11:12:18 阅读更多 →
基于YOLO的PCB缺陷检测系统开发与优化实践

基于YOLO的PCB缺陷检测系统开发与优化实践

1. 项目概述:基于深度学习的PCB缺陷检测系统 这个项目构建了一个完整的工业质检解决方案,通过YOLO系列算法实现PCB板的自动化缺陷检测,并采用Django框架开发了可视化的Web管理界面。我在电子制造业的AI质检领域有五年实战经验,这套…

2026/7/28 11:11:18 阅读更多 →
学术资源获取全攻略:从检索技巧到开放获取

学术资源获取全攻略:从检索技巧到开放获取

1. 学术资源获取的现状与痛点 作为一名在科研领域摸爬滚打多年的老手,我深知文献检索对于学术工作者的重要性。记得刚读研时,为了找一篇关键论文,我不得不辗转多个图书馆,甚至托国外的同学帮忙复印邮寄。这种经历让我深刻体会到开…

2026/7/28 11:11:18 阅读更多 →

最新新闻

物联网安全芯片SE050与STM32的硬件集成与优化实践

物联网安全芯片SE050与STM32的硬件集成与优化实践

1. 为什么物联网设备需要专用安全芯片?在物联网设备爆炸式增长的今天,安全问题已经成为制约行业发展的关键瓶颈。根据我过去五年参与工业物联网项目的经验,传统MCU软件加密的方案存在三大致命缺陷:第一是密钥存储不安全。普通MCU的…

2026/7/28 11:27:26 阅读更多 →
物联网设备安全芯片SE050与PIC32MX675F512L集成方案

物联网设备安全芯片SE050与PIC32MX675F512L集成方案

1. 为什么物联网设备需要专用安全芯片?在开始讨论SE050和PIC32MX675F512L的具体集成方案前,我们需要先理解为什么现代物联网设备需要专用安全芯片。传统MCU(如PIC32系列)虽然功能强大,但在安全防护方面存在几个致命短板…

2026/7/28 11:27:26 阅读更多 →
Wukong AICRM Docker部署指南:从一键启动到API集成与批量任务测试

Wukong AICRM Docker部署指南:从一键启动到API集成与批量任务测试

这次我们来看一个本地部署的 AI 客户关系管理工具——Wukong AICRM。对于需要处理客户数据、进行智能分析或自动化营销的团队来说,一个能私有化部署、支持批量任务且提供 API 接口的工具,其价值不言而喻。Wukong AICRM 正是这样一个项目,它通…

2026/7/28 11:27:26 阅读更多 →
如何快速下载抖音视频:面向初学者的完整无水印批量下载指南

如何快速下载抖音视频:面向初学者的完整无水印批量下载指南

如何快速下载抖音视频:面向初学者的完整无水印批量下载指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …

2026/7/28 11:27:26 阅读更多 →
TAC框架与CBF在安全控制中的Matlab实现

TAC框架与CBF在安全控制中的Matlab实现

1. 项目概述:TAC与安全一致性跟踪 在控制系统中,确保动态系统在满足状态和输入约束的前提下实现精确跟踪,一直是控制理论研究的核心挑战。TAC(Tracking with Assurance of Constraints)作为一种新型控制框架&#xff0…

2026/7/28 11:27:26 阅读更多 →
OData 协议介绍和使用

OData 协议介绍和使用

![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dad700ebe71beb397c82a4ca4671876.png#pic_center OData 协议 OData一个开放的协议以一种简单规范的方式来创建和消费可查询和可协作的RESTful APIS。 查询,分页,排序在GET的Request请求中…

2026/7/28 11:26:26 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻