Spring框架—IOC容器—属性赋值的几种方式

一、常用的赋值方式

在Spring中,有两种常用的赋值方式:set注入和构造注入。

1.1 set注入

通过对应的setXxxx()方法为属性赋值。

1.1.1 ApplicationContext.xml配置文件
<?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">
    <!--将创建好的对象,交给Spring管理 -->
    <bean id="s1" class="com.wyl.spring.Student" >
        <property name="sid" value="10001"></property>
        <property name="sname" value="张三"></property>
    </bean>
</beans>

标签:通过set方式为属性赋值。
name属性:对应的并不是属性名字,对应的是setXxxx()方法。
sid对应的是一个叫做setSid()的方法。
sname对应的是一个叫做setSname()的方法。
name属性与set方法对应关系
如果将对应类中的属性名不变,只改变set方法名,则在Spring配置文件中也需要指定name属性名为set方法后的首字母小写的全部字母,否则Spring将无法为属性赋值。
在这里插入图片描述

value属性:为属性赋的值。

1.1.2 测试类:
package com.wyl.spring;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringBeanTest {
    public static void main(String[] args) {
        // 1.创建IOC容器,并指定配置文件位置
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 2.从IOC容器中获取管理的对象
        Student bean = ac.getBean("s1",Student.class);
        // 3.输出验证
        System.out.println(bean);
    }
}

1.1.2 控制台输出:
Student{sid=10001, sname='张三'}

1.2 构造注入

通过对应的构造方法为属性赋值。

1.2.1 修改Student类
package com.wyl.spring;

public class Student {
    private Integer sid;
    private String sname;
    // 新增一个属性
    private Double score;

    public Student() {
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    // 新增两个参数的有参构造
    public Student(Integer sid, String sname) {
        this.sid = sid;
        this.sname = sname;
    }

    // 新增三个参数的有参构造
    public Student(Integer sid, String sname, Double score) {
        this.sid = sid;
        this.sname = sname;
        this.score = score;
    }
    // 重载三个参数的有参构造
    public Student(Double score, String sname, Integer sid){
        this.sid = sid;
        this.sname = sname;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                '}';
    }
}


1.2.2 配置ApplicationContext.xml文件
    <!--通过构造方法,为属性赋值-->
    <bean id="s2" class="com.wyl.spring.Student" >
        <constructor-arg  value="10002"></constructor-arg>
        <constructor-arg  value="李四"></constructor-arg>
    </bean>

标签: 通过构造方法为属性赋值。
value属性:需要赋的值。
Spring会自动的匹配到两个参数的构造方法,然后为其属性赋值。

1.2.2 测试类
package com.wyl.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringBeanTest {
    public static void main(String[] args) {
        // 1.创建IOC容器,并指定配置文件位置
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 2.从IOC容器中获取管理的s2对象
        Student bean = ac.getBean("s2",Student.class);
        // 3.输出验证
        System.out.println(bean);
    }
}
1.2.3 控制台输出
Student{sid=10002, sname='李四'}
1.2.3 使用重载构造方法赋值

在使用构造方法赋值时,Spring会自动的匹配到对应参数个数的构造方法,然后为其属性赋值,但是如果出现了重载方法,Spring会匹配其中一个构造方法来赋值,有些时候就会造成,赋值并不是想要的结果。

    <!--通过构造方法,为属性赋值,想为name为李四的学生,score赋值93,id赋值1002-->
    <bean id="s2" class="com.wyl.spring.Student" >
        <constructor-arg value="10002"></constructor-arg>
        <constructor-arg value="96"></constructor-arg>
        <constructor-arg value="李四"></constructor-arg>
    </bean>

使用之前的测试类运行,结果:

Student{sid=96, sname='李四', score=10002.0}

Spring匹配的是这个构造方法

  // 重载三个参数的有参构造
    public Student(Double score, Integer sid,String sname){
        this.sid = sid;
        this.sname = sname;
        this.score = score;
    }

结果出现了偏差,并不是想要的样子。

1.2.3.1 解决办法
  1. 使用索引,指定为某个位置的属性赋值
    <bean id="s2" class="com.wyl.spring.Student" >
        <constructor-arg index="1" value="10002"></constructor-arg>
        <constructor-arg index="0" value="96"></constructor-arg>
        <constructor-arg index="2" value="李四"></constructor-arg>
    </bean>

使用之前的测试类运行,结果:

Student{sid=10002, sname='李四', score=96.0}
  1. 使用参数类型区分构造方法参数
    <!--通过构造方法,为属性赋值,想为name为李四的学生,score赋值93,id赋值1002-->
    <bean id="s2" class="com.wyl.spring.Student" >
        <constructor-arg type="java.lang.Integer" value="10002"></constructor-arg>
        <constructor-arg type="java.lang.Double"  value="96"></constructor-arg>
        <constructor-arg type="java.lang.String" value="李四"></constructor-arg>
    </bean>

使用之前的测试类运行,结果:

Student{sid=10002, sname='李四', score=96.0}
  1. 使用类型、索引组合方式
    这种方式更加精确的匹配构造方法。
    <bean id="s2" class="com.wyl.spring.Student" >
        <constructor-arg index="0" type="java.lang.Integer" value="10002"></constructor-arg>
        <constructor-arg index="1" type="java.lang.Double"  value="96"></constructor-arg>
        <constructor-arg index="2" type="java.lang.String" value="李四"></constructor-arg>
    </bean>

使用之前的测试类运行,结果:

Student{sid=10002, sname='李四', score=96.0}

Spring匹配的是这个构造方法

  // 新增三个参数的有参构造
    public Student(Integer sid, Double score,String sname) {
        this.sid = sid;
        this.sname = sname;
        this.score = score;
    }

二、 其他赋值方式

2.1 P名称空间赋值

P名称空间是为了简化Spring XML配置文件的复杂程度。它与set注入方式基本相同,也是简化了标签的配置方式。

2.2 导入名称空间

需要在Spring的配置文件导入P标签的命名空间

       xmlns:p="http://www.springframework.org/schema/p"
     <?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"
       xmlns:p="http://www.springframework.org/schema/p">
    <bean id="s3" class="com.wyl.spring.Student"
        p:sid="1003" p:sname="123" p:score="96">
    </bean>
</beans>

P是前缀
sid是后缀,对应的就是set注入的name属性。

2.2 测试类

package com.wyl.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringBeanTest {
    public static void main(String[] args) {
        // 1.创建IOC容器,并指定配置文件位置
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 2.从IOC容器中获取管理的对象
        Student bean = ac.getBean("s3",Student.class);
        // 3.输出验证
        System.out.println(bean);
    }
}

2.3 控制台输出

Student{sid=1003, sname='123', score=96.0}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值