news 2026/2/22 6:11:12

Spring-IOC创建对象的方式构造器注入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring-IOC创建对象的方式构造器注入

IOC创建对象的方式(构造器注入)

创建无参构造

实现类中的 JavaBean

publicclassUser{privateStringname;// 无参构造默认是隐式的publicUser(){System.out.println("User的无参构造");}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicvoidshow(){System.out.println("name="+name);}}

beans.xml

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"><beanid="user"class="com.cike3.pojo.User"><propertyname="name"value="cike_y"/></bean></beans>

测试方法中实例化容器&使用

publicclassSprin_03_Test{@Testpublicvoidtest(){// User user = new User();ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");Useruser=(User)context.getBean("user");}}

创建有参构造

实现类的JavaBean

publicclassUser{privateStringname;publicUser(Stringname){this.name=name;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicvoidshow(){System.out.println("name="+name);}}

对比无参构造的JavaBean实现类,这里变了

测试方法中需要调用JavaBean实现类中的show方法,其他则不变

publicclassSprin_03_Test{@Testpublicvoidtest(){// User user = new User();ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");Useruser=(User)context.getBean("user");user.show();// 这是多了这行罢了}}

而Spring是基于容器管理的,也可以说是基于XML配置,所以重点都是在XML中进行操作的

官方文档参考:

https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html https://docs.spring.io/spring-framework/docs/5.2.0.RELEASE/spring-framework-reference/core.html#beans-constructor-injection

下标赋值

<!--有参构造第一种,下标赋值--><beanid="user"class="com.cike3.pojo.User"><constructor-argindex="0"value="cike_y"/></bean>

参数类型匹配(不建议使用)

我们这里name的参数类型很明显是String类型

<!--有参构造第二种,参数类型匹配--><beanid="user"class="com.cike3.pojo.User"><constructor-argtype="java.lang.String"value="cike_y"/></bean>

如果我们的两个参数的类型都是String,它就冲突了

参数名匹配

<!--有参构第三种,通过参数名--><beanid="user"class="com.cike3.pojo.User"><constructor-argname="name"value="cike_y"/></bean>

实验(有参&无参)

JavaBean的User类(有参构造)

publicclassUser{privateStringname;publicUser(Stringname){this.name=name;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicvoidshow(){System.out.println("name="+name);}}

JavaBean的User2类( 无参构造)

publicclassUser2{privateStringname;publicUser2(){System.out.println("User2无参构造");}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicvoidshow(){System.out.println("name="+name);}}

beans.xml 配置Spring容器

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"><!--有参构造,User类--><beanid="user"class="com.cike3.pojo.User"><constructor-argtype="java.lang.String"value="cike_y"/></bean><!--无参构造,User2 类--><beanid="user2"class="com.cike3.pojo.User2"/></beans>

测试方法中,实例化对象的类

publicclassSprin_03_Test{@Testpublicvoidtest(){// User user = new User();// Spring容器,就类似于婚介网站!ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");Useruser=(User)context.getBean("user");Useruser2=(User)context.getBean("user");System.out.println(user==user2);//内存中只有一个实例,这里都是User类型}}

在这里的测试方法,只是为了证明获取的对象都是User(有参构造的类),但是为什么还是调用到了 User2 类 无参构造方法进行探究!

总结:在配置文件加载的时候,容器中的对象就已经初始化了!否则User2的无参构造方法不会被调用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/20 21:37:07

PyTorch-CUDA-v2.7镜像在学术研究中的应用前景

PyTorch-CUDA-v2.7镜像在学术研究中的应用前景 学术AI开发的现实困境&#xff1a;从“能跑”到“复现”的鸿沟 在高校实验室里&#xff0c;一个常见的场景是&#xff1a;研究生小王终于把论文复现代码从GitHub拉下来&#xff0c;满心期待地运行python train.py&#xff0c;结果…

作者头像 李华
网站建设 2026/2/21 0:08:27

Win8.1不认USB2.0?驱动安装与修复教程

本文将探讨在Windows 8.1系统上遇到USB 2.0驱动问题的核心原因和实用解决方案。许多用户升级或安装系统后&#xff0c;发现老旧的USB 2.0接口设备无法识别或速度异常&#xff0c;这通常并非硬件损坏&#xff0c;而是驱动兼容性或系统设置问题&#xff0c;通过几个具体步骤大多可…

作者头像 李华
网站建设 2026/2/18 19:43:14

Linux-删除一级目录下子目录-github例子

查看包含git和github的目录有哪些 find /opt/ai-git-resources -mindepth 2 -maxdepth 2 -type d \( -name .git -o -name .github \) -print执行删除git和gihub的所有git和github目录 find /opt/ai-git-resources -mindepth 2 -maxdepth 2 -type d \( -name .git -o -name .gi…

作者头像 李华
网站建设 2026/2/20 6:19:33

PyTorch-CUDA-v2.7镜像在安防监控场景的落地

PyTorch-CUDA-v2.7镜像在安防监控场景的落地智能监控的算力困局&#xff1a;从“看得见”到“看得懂” 在城市天网、园区安保、交通枢纽等关键场景中&#xff0c;摄像头早已不再是简单的录像设备。如今&#xff0c;一个典型的中型安防系统可能接入上百路高清视频流&#xff0c;…

作者头像 李华
网站建设 2026/2/21 5:53:21

PyTorch-CUDA镜像如何提升GPT类模型推理效率

PyTorch-CUDA镜像如何提升GPT类模型推理效率 在大模型时代&#xff0c;一个常见的场景是&#xff1a;研究团队刚训练好一个基于GPT架构的语言模型&#xff0c;准备部署为在线服务。然而当他们将代码从本地环境迁移到生产服务器时&#xff0c;却频频遭遇 CUDA out of memory、cu…

作者头像 李华
网站建设 2026/2/21 6:34:36

前端必备技能:彻底搞懂JavaScript深浅拷贝,告别数据共享的坑!

❤ 写在前面 如果觉得对你有帮助的话&#xff0c;点个小❤❤ 吧&#xff0c;你的支持是对我最大的鼓励~ 个人独立开发wx小程序&#xff0c;感谢支持&#xff01;开篇故事&#xff1a;为什么我的数据“打架”了&#xff1f; 想象一下这个场景&#xff1a;你在开发一个购物车功能…

作者头像 李华