补充知识:IOC创建对象的方式

声明

本文为其他博主原创文章整合,仅用作个人学习,特此声明

参考文章链接

(3条消息) B站 - 狂神 - Spring5课堂笔记_夜里的雨的博客-CSDN博客_狂神spring5笔记

4、IOC创建对象的方式

  1. 使用无参构造创建对象,默认。

    测试发现通过IOC方式创建对象默认走了一遍无参构造

    测试过程见【狂神说Java】Spring5最新完整教程IDEA版通俗易懂_哔哩哔哩_bilibili p6 4 min 左右

    如果此时我们把要创建对象类的无参构造删除了,就会直接报错

  2. 使用有参构造(如下)

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
posted @   无关风月7707  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示