前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Spring】002-探索Spring IOC创建对象的方式

【Spring】002-探索Spring IOC创建对象的方式

作者头像
訾博ZiBo
发布2025-01-06 15:43:50
发布2025-01-06 15:43:50
9800
代码可运行
举报
文章被收录于专栏:全栈开发工程师
运行总次数:0
代码可运行

一、探索Spring IOC创建对象

1、前述

在Spring的入门程序HelloSpring中,我们并没有使用“new 类();”语句,Spring帮我们自动创建了,现在让我们来探索一下Spring帮我的创建对象的过程;

2、代码示例(常规写法)

第一步:我们先写一个User实体类
代码语言:javascript
代码运行次数:0
复制
package com.zibo.pojo;

public class User {
    private String name;

    public User() {
        System.out.println("user对象被创建了!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("name为:" + name);
    }
}
第二步:写测试类
代码语言:javascript
代码运行次数:0
复制
package com.zibo;

import com.zibo.pojo.User;

public class MyTest {
    public static void main(String[] args) {
        new User();
    }
}
测试结果:
代码语言:javascript
代码运行次数:0
复制
user对象被创建了!
总结:

我们平常使用new通过构造函数创建对象,构造函数被调用,其中代码会执行,那么让我们来探索Spring创建对象的痕迹 ;

3、Spring创建对象

第一步:编写applicationContext.xml配置文件
代码语言:javascript
代码运行次数: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="user" class="com.zibo.pojo.User"/>
</beans>
第二步:修改测试类
代码语言:javascript
代码运行次数:0
复制
package com.zibo;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    public static void main(String[] args) {
        //获取Spring上下文容器对象
        new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}
测试结果:
代码语言:javascript
代码运行次数:0
复制
user对象被创建了!
总结:

可以看出,在加载配置文件的时候,Spring为我们通过无参构造创建了user对象;

4、让我们再加上属性注入

第一步:修改applicationContext.xml配置文件
代码语言:javascript
代码运行次数: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="user" class="com.zibo.pojo.User">
        <property name="name" value="訾博"/>
    </bean>
</beans>
第二步:修改User类的setName方法
代码语言:javascript
代码运行次数:0
复制
package com.zibo.pojo;

public class User {
    private String name;

    public User() {
        System.out.println("user对象被创建了!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("setName方法被执行了");
        this.name = name;
    }

    public void show(){
        System.out.println("name为:" + name);
    }
}
测试结果:
代码语言:javascript
代码运行次数:0
复制
user对象被创建了!
setName方法被执行了
总结:

看懂了吧!注意这里是使用无参构造方法创建对象

注意:

必须有无参构造方法,否则报错!

二、继续探索Spring IOC创建对象

1、让我们使用带参构造函数进行创建对象

第一步:修改User实体类(添加带参构造)
代码语言:javascript
代码运行次数:0
复制
package com.zibo.pojo;

public class User {
    private String name;

    public User() {
        System.out.println("user对象被创建了!");
    }

    public User(String name) {
        this.name = name;
        System.out.println("使用带参构造创建对象了!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("setName方法被执行了");
        this.name = name;
    }

    public void show(){
        System.out.println("name为:" + name);
    }
}
第二步:修改applicationContext.xml配置文件
代码语言:javascript
代码运行次数: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="user" class="com.zibo.pojo.User">
        <!--使用下标赋值-->
        <constructor-arg index="0" value="訾博"/>
    </bean>
</beans>
测试结果:
代码语言:javascript
代码运行次数:0
复制
使用带参构造创建对象了!

2、applicationContext.xml配置文件中使用带参构造函数创建对象传参的几种方式

方法一:使用下标传参
代码语言:javascript
代码运行次数: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="user" class="com.zibo.pojo.User">
        <!--使用下标传参-->
        <constructor-arg index="0" value="訾博"/>
    </bean>
</beans>
方法二:使用自动类型传参(自动根据类型传参:不建议使用)
代码语言:javascript
代码运行次数: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="user" class="com.zibo.pojo.User">
        <!--使用自动类型传参(自动根据类型传参:不建议使用)-->
        <constructor-arg type="java.lang.String" value="訾博"/>
    </bean>
</beans>
方式三:使用name给对应的属性名传参
代码语言:javascript
代码运行次数: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="user" class="com.zibo.pojo.User">
        <!--使用name给对应的属性名传参-->
        <constructor-arg name="name" value="訾博"/>
    </bean>
</beans>

3、注意

默认情况下,配置文件被加载时,所有的bean对象都会被实例化,而且只创建这一次,随后无论取几次,所取到的对象都是同一个对象;

三、总结

默认情况下,IOC创建对象就是在配置文件被加载的时候,Spring会立即通过所配置bean对应类的无参构造方法和setter方法或带参构造方法创建所有的bean对象,当需要的时候从IOC容器获取即可,只创建这一次,随后无论取几次,所取到的对象都是同一个对象;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、探索Spring IOC创建对象
    • 1、前述
    • 2、代码示例(常规写法)
      • 第一步:我们先写一个User实体类
      • 第二步:写测试类
      • 测试结果:
      • 总结:
    • 3、Spring创建对象
      • 第一步:编写applicationContext.xml配置文件
      • 第二步:修改测试类
      • 测试结果:
      • 总结:
    • 4、让我们再加上属性注入
      • 第一步:修改applicationContext.xml配置文件
      • 第二步:修改User类的setName方法
      • 测试结果:
      • 总结:
      • 注意:
  • 二、继续探索Spring IOC创建对象
    • 1、让我们使用带参构造函数进行创建对象
      • 第一步:修改User实体类(添加带参构造)
      • 第二步:修改applicationContext.xml配置文件
      • 测试结果:
    • 2、applicationContext.xml配置文件中使用带参构造函数创建对象传参的几种方式
      • 方法一:使用下标传参
      • 方法二:使用自动类型传参(自动根据类型传参:不建议使用)
      • 方式三:使用name给对应的属性名传参
    • 3、注意
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档