news 2026/6/9 18:48:01

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/6/9 18:39:22

【干货收藏】AI大模型知识体系详解:从基础术语到实践应用

本文全面介绍AI大模型知识体系&#xff0c;包括基本概念&#xff08;参数、token、多模态等&#xff09;和大语言模型原理&#xff08;n-gram模型、神经网络、Transformer架构&#xff09;。重点讲解实践方法&#xff1a;提示词工程通过CO-STAR框架优化模型输出&#xff1b;知识…

作者头像 李华
网站建设 2026/6/6 8:23:45

PyTorch-CUDA-v2.7镜像在空气质量预报中的表现

PyTorch-CUDA-v2.7镜像在空气质量预报中的表现 在城市化进程不断加快的今天&#xff0c;空气污染已成为影响公共健康和城市管理的重要挑战。传统的空气质量预测依赖于复杂的气象动力学模型与化学传输方程&#xff0c;虽然物理意义明确&#xff0c;但计算成本高、更新滞后&#…

作者头像 李华
网站建设 2026/6/9 5:29:29

Java开发者如何成功转型AI大模型领域:路径与策略

引言&#xff1a;Java开发者的AI转型契机 在AI大模型技术席卷全球的浪潮下&#xff0c;传统Java开发者正面临前所未有的职业转型机遇。据LinkedIn 2023年报告&#xff0c;AI相关岗位增长率高达74%&#xff0c;而具备传统开发经验又掌握AI技能的复合型人才尤为稀缺。本文将从Jav…

作者头像 李华
网站建设 2026/6/6 12:37:58

至顶智库(ZD Insights)

至顶智库是至顶科技旗下&#xff0c;专注于人工智能、算力芯片、智能驾驶等前沿领域产业研究的科技智库。重点研究方向是智能前沿趋势下的算力新生态、转型新场景、企业新工具。已推出产业图谱、产业报告、行业榜单、公司研究、会议观察等多项研究成果。曾于第七届世界智能大会…

作者头像 李华