目录

  • 一、常用的赋值方式
    • 1.1 set注入
      • 1.1.1 ApplicationContext.xml配置文件
      • 1.1.2 测试类:
      • 1.1.2 控制台输出:
    • 1.2 构造注入
      • 1.2.1 修改Student类
      • 1.2.2 配置ApplicationContext.xml文件
      • 1.2.2 测试类
      • 1.2.3 控制台输出
      • 1.2.3 使用重载构造方法赋值
        • 1.2.3.1 解决办法
  • 二、 其他赋值方式
    • 2.1 P名称空间赋值
    • 2.2 导入名称空间
    • 2.2 测试类
    • 2.3 控制台输出

一、常用的赋值方式

在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()的方法。

如果将对应类中的属性名不变,只改变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;}@Overridepublic 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}

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

  1. Spring框架—IoC容器

    首先我们需要了解一下是什么是IoC.IoC是Spring的核心技术之一,全称是Inversion of Control(控制反转).最原始的创建对象的方法就是通过new来实现(手动的编写代码实现),而 ...

  2. Spring框架IOC容器,依赖注入,控制反转

    Spring的配制文件中 以上标签的属性id是不是必须的?不是必须的,如果定义id,那么其它的bean就可以通过此name来引用id 创建beans.xml <?xml version=&quo ...

  3. spring的IOC容器Bean管理(基于xml方式)

    ==目的:==降低耦合度 ==技术:==xml解析.工厂模式.反射 ioc容器的实现 spring框架提供了两种实现方式(两个接口) BeanFactory接口 ioc容器的基本实现,是spring框 ...

  4. Spring IOC容器组件注入的几种方式

    整理一下之前Spring的学习笔记,大致有一下几种Spring注入到容器中的方法: 1).配置在xml的方式. 2).开启包扫描@ComponentScan使用@Component,@Service, ...

  5. Spring给bean属性赋值的三种方式

    property方式赋值 : 使用property给属性赋值 ,name指的是该类的属性名 ,value 指的是该属性对应的属性值 ,property 赋值也称为 set 赋值 ,需要赋值的属性,必须 ...

  6. SpringBoot给属性赋值的几种方式以及JSR303校验

    一.@ConfigurationProperties的作用: 将配置文件中配置的每一个属性的值映射到这个组件中; 告诉SpringBoot将本来中的所有属性和配置文件中的相关配置进行绑定; 参数 pr ...

  7. spring 全局变量_[Spring]-Spring框架-02-IOC容器

    Spring框架 IOC容器 理解IOC容器和DI依赖注入 IOC容器 Inverser Of Control反转控制 就是把原来在程序中创建HelloService对象的控制权限交给Spring管理 ...

  8. java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现

    工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...

  9. 框架:简单实现Spring的IOC容器

    学习过Spring的同学都知道,Spring框架的核心就是IoC和AOP.Spring可以理解为一个工厂,负责对象的创建和对象间关系的维护.IoC即控制反转,简单点说就是原来的对象是在要使用之前通过在 ...

最新文章

  1. 基于 linux 平台的 libpcap 源代码分析
  2. Sql Server 2008R2版本中有关外键Foreign的使用
  3. java中容易混淆的方法_java中容易混淆的概念
  4. es6的map()方法解释
  5. java 监听本地端口_Java-在本地端口上侦听RTP数据包
  6. opencv:图像的基本变换
  7. leetcode 179 python
  8. 《程序员面试宝典》精华 底层部分
  9. 【回顾】推荐系统工程师技能树
  10. python网上在线编程_在线python编程
  11. 如何用python刷屏_利用python实现在微信群刷屏的方法
  12. cad批量打印快捷键_CAD高效批量打印成PDF
  13. crc循环冗余校验码c语言,CRC循环冗余校验码的生成
  14. 威金敌敌畏--比特解决威金方案(转)
  15. 适合运动健身的蓝牙耳机推荐,六款适合运动健身的蓝牙耳机
  16. qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库
  17. CMStudio中出现‘$错误‘ is not a vaild integer value如何解决
  18. CPU的分身术:千手观音与齐天大圣
  19. Tableau 2020.2版本如何做环形图
  20. 云计算介绍之云计算服务器

热门文章

  1. java解压zip_Java实现zip压缩文件的解压
  2. NOIP2016 提高组 解题报告
  3. 【Linux36-2】zabbix监控(mysql+percona+tomcat+主动式监控+onealert云告警)
  4. python爬虫我要个性网,获取头像
  5. 在uniapp中使用canvas制作海报(二)
  6. 集中式、分布式、集群、高并发等概念
  7. 多元非线性函数拟合(Matlab_nlinfit函数)
  8. 【记录】记第一次使用Postman9.22.2英文版配置测试接口
  9. iOS开发常用的RGB色值和中文名字
  10. js求两圆交点_详解js实现线段交点的三种算法