补充知识:IOC创建对象的方式
声明
本文为其他博主原创文章整合,仅用作个人学习,特此声明
参考文章链接
(3条消息) B站 - 狂神 - Spring5课堂笔记_夜里的雨的博客-CSDN博客_狂神spring5笔记
4、IOC创建对象的方式
-
使用无参构造创建对象,默认。
测试发现通过IOC方式创建对象默认走了一遍无参构造
测试过程见【狂神说Java】Spring5最新完整教程IDEA版通俗易懂_哔哩哔哩_bilibili p6 4 min 左右
如果此时我们把要创建对象类的无参构造删除了,就会直接报错
-
使用有参构造(如下)
1.下标赋值
index指的是有参构造中参数的下标,下标从0开始;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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">
<bean id="user" class="com.xy.pojo.User">
<constructor-arg index="0" value="xy"/>
</bean>
</beans>
2.类型赋值(不建议使用)
<bean id="user" class="com.xy.pojo.User">
<constructor-arg type="java.lang.String" value="xy"/>
</bean>
假如有多个相同类型的参数,就创建多个标签,会根据标签顺序赋值
3.直接通过参数名赋值(掌握)
<bean id="user" class="com.xy.pojo.User">
<constructor-arg name="name" value="xy"></constructor-arg>
</bean>
<!-- 比如参数名是name,则有name="具体值" -->
4.测试一个好玩的
多写一个无参构造类UserT,但是我不给他的属性赋值,给之前写好的有参构造类User类的name属性赋值
经过测试发现无参构造类也被运行了
这说明注册bean之后就对象的初始化了(类似 new 类名())
总结:在配置文件加载的时候,容器(< bean>)中管理的对象就已经初始化了
用一下秦老师举的例子:
bean容器就像是个婚介所,里边所有对象都是一开始就初始化完成的,我们只需要直接挑选就好了
简单来讲就是:婚介所内部的可供挑选的对象并不会在你挑选以后才进行初始化,而是在婚介所准备工作完成并开张的时候(配置文件加载的时候)就初始化完成了
弹幕评论:
直接通过参数名赋值的方式还需要无参构造和set方法,index和type只需要有参构造
就算是new 两个对象,也是只有一个实例(单例模式:全局唯一)
User user = (User) context.getBean("user");
User user2 = (User) context.getBean("user");
system.out.println(user == user2)//结果为true
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律