news 2026/8/12 13:43:53

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/8/8 5:35:00

亲测有效 | FreeBuds 7i啸叫处理方法来啦~

分享个蓝牙耳机小问题&#xff0c;用FreeBuds 7i偶尔会碰到啸叫&#xff0c;本来安安静静听歌&#xff0c;突然的啸叫一下&#xff0c;虽然不严重&#xff0c;但还挺影响使用感&#xff0c;后来才知道这是普遍情况&#xff0c;很好解决&#xff5e;啸叫的原因其实也不复杂&…

作者头像 李华
网站建设 2026/8/6 13:56:40

结构链表:揭秘动态存储与高效操作的核心原理

在计算机科学中&#xff0c;结构链表是一种基础且重要的数据结构。它并非简单的线性排列&#xff0c;而是将数据&#xff08;结构体&#xff09;与指向下一个节点的指针相结合&#xff0c;形成一种可以动态调整的链式存储方式。理解其核心原理与操作&#xff0c;是掌握更复杂数…

作者头像 李华
网站建设 2026/7/31 11:42:57

PyTorch-CUDA镜像在医学影像分析中的潜力

PyTorch-CUDA镜像在医学影像分析中的潜力 在现代医疗AI研发一线&#xff0c;一个常见的场景是&#xff1a;研究人员终于拿到了一批标注完整的肺部CT数据&#xff0c;准备训练一个新的病灶检测模型。可当他把代码从本地笔记本搬到实验室的A100服务器时&#xff0c;却因为CUDA版本…

作者头像 李华
网站建设 2026/8/4 3:26:58

【收藏学习】AI Agent完全指南:从理论到实践的智能体系统构建

AI Agent是具备自主推理、工具调用和任务执行能力的智能系统&#xff0c;由模型、工具和编排层三大核心组件构成。通过ReAct、CoT等推理框架&#xff0c;实现思考到执行的闭环。结合向量嵌入、RAG和提示词工程等技术&#xff0c;使大模型升级为可感知、决策和执行的数字员工&am…

作者头像 李华
网站建设 2026/7/30 20:41:02

Matlab模型下的“共享储能电站“在工业用户日前优化经济调度中的实践与场景3不完全复现

Matlab基于共享储能电站的工业用户日前优化经济调度 场景3不完全复现 文章提出一种基于共享储能电站的工业用户日前优化经济调度方法。 首先提出共享储能电站的概念&#xff0c;分析其商业运营模式。 然后将共享储能电站应用到工业用户经济优化调度中&#xff0c;通过协调各用户…

作者头像 李华